MFC相談室 mfc23d.dllat TECH
MFC相談室 mfc23d.dll - 暇つぶし2ch2:デフォルトの名無しさん
16/09/21 02:30:56.74 5qi85AkV.net
< `∀´>ニダー

3:デフォルトの名無しさん
16/09/21 13:22:08.79 QlBymPtT.net


4:デフォルトの名無しさん
16/09/21 13:34:34.78 lqTjg4Df.net
>>1 乙
ここは即死あるんだっけ?

5:デフォルトの名無しさん
16/09/21 14:32:51.99 ib8am8Zc.net
1年くらい前から即死しない仕様になってる

6:デフォルトの名無しさん
16/09/21 15:00:46.64 DJrsIBwc.net
即死なんて見たこと無い

7:デフォルトの名無しさん
16/09/23 17:10:11.66 1AYxo37g.net
ひでぶ

8:デフォルトの名無しさん
16/09/24 19:06:33.61 vAKGJfNO.net
いや即死あるぞ
俺が今月立てたスレなくなってる

9:デフォルトの名無しさん
16/09/25 15:44:56.16 fXLErY67.net
1000いったんでないの?、、ないかw

10:デフォルトの名無しさん
16/09/26 22:01:57.62 TukXLw2X.net
ドトネに負けたのか?

11:デフォルトの名無しさん
16/10/11 01:01:55.41 XtQ45pny.net
ネタくれ

12:デフォルトの名無しさん
16/10/11 19:51:53.66 XtQ45pny.net
質問しろ~
なんでも答えてやんぜって思ったら、俺c++できないんだったw

13:デフォルトの名無しさん
16/10/15 18:29:48.76 gqlXN5xD.net
そろそろ埋めようぜ

14:デフォルトの名無しさん
16/10/17 00:02:34.42 rdSWZXJ7.net
埋め

15:デフォルトの名無しさん
16/10/17 16:06:58.50 rrzVlL3A.net
産め

16:デフォルトの名無しさん
16/10/17 17:53:44.29 WLzPflAs.net


17:デフォルトの名無しさん
16/10/17 18:21:19.26 WLzPflAs.net
そろそろ本気で埋めるか

18:デフォルトの名無しさん
16/10/18 13:35:30.77 w7Iv1X0L.net
埋める前に次スレ立ててくれ

19:デフォルトの名無しさん
16/10/18 21:44:51.96 ZG7+Cw8s.net
最新のMFCはコンストラクタでメンバ変数初期化サボってるクラスないよね

20:デフォルトの名無しさん
16/10/22 20:44:20.18 cpluUqjP.net
過疎ってるな~

21:デフォルトの名無しさん
16/10/26 17:50:00.81 K3buMdl9.net
いつの間にかMFCでもDirect2Dがサポートされてたんだね
ちょっとサンプル見たけどGDIと比べると複雑だな

22:デフォルトの名無しさん
16/11/01 21:11:07.99 fAr6l5+l.net
保守

23:デフォルトの名無しさん
16/11/03 14:33:38.93 kJS9Zyl0.net
CStdioFile::ReadStringでshiftjisのファイルをバッファに読み込んだんですが、
テキストファイルの内容は「あ」のみ
バッファの内容は
82 00 A0 00
でした。
unicodeなら
30 00 42 00

00 30 00 42
になると思うのですが、なにか勘違いしていますかね?

24:片山博文MZ ◆T6xkBnTXz7B0
16/11/03 14:52:47.88 bkzCM1IA.net
>>23
テキストファイルをUTF-16にするか、UTF-8にしてUTF-16に変換する。

25:デフォルトの名無しさん
16/11/03 15:09:32.76 s4829peE.net
setlocaleしてないからascii-8bitとして読み込まれたと予想。

26:片山博文MZ ◆T6xkBnTXz7B0
16/11/03 15:43:52.99 bkzCM1IA.net
そのテキストファイル、シフトJISになってるぜ

27:デフォルトの名無しさん
16/11/03 16:27:10.81 kJS9Zyl0.net
>>25
setlocaleしたら
42 30
となっちゃいました
>>26
そう書いていますが?・・・

28:デフォルトの名無しさん
16/11/03 16:40:23.70 s4829peE.net
>unicodeなら
>30 00 42 00
>か
>00 30 00 42
てのがおかしい。

29:デフォルトの名無しさん
16/11/03 19:17:37.78 Vul1aP3I.net
盛り上がってきましたw

30:デフォルトの名無しさん
16/11/03 19:25:00.47 bkzCM1IA.net
レス番消えてる。。。荒らしか

31:デフォルトの名無しさん
16/11/03 19:31:17.07 bkzCM1IA.net
片山ウザい氏ね

32:デフォルトの名無しさん
16/11/03 21:26:45.01 HYN+5xRW.net
たしかにマジウゼー

33:デフォルトの名無しさん
16/11/06 23:23:45.08 5/z3Ppl4.net
嫌われ者w

34:デフォルトの名無しさん
16/11/07 21:17:10.96 71HmpZSZ.net
プロセスが起動した状態で、
ツールバーのツールチップの文字列を取得、変更したいのですが
ちょっと手こずっています。アドバイスお願いします
以下の方法ではツールチップではなくボタン文字列が対象になるようです
TBBUTTONINFO bi = {sizeof(bi), TBIF_STYLE};
m_wndToolBar.GetToolBarCtrl().GetButtonInfo(9999, &bi);
::MessageBox(NULL, bi.pszText, bi.pszText, MB_OK);
以下はまだ使い方がよくわかってないけど目的がちょっと違うように思われます
CToolTipCtrl* tt = m_wndToolBar.GetToolBarCtrl().GetToolTips();
tt->UpdateTipText(...);

35:デフォルトの名無しさん
16/11/08 07:56:03.76 Dir9NEfz.net
>>34
動的な変更は、やった事ないけど、このあたりでは?
URLリンク(home.att.ne.jp)
アプリを普通に作っていれば、取得はボタンのリソースIDと同じIDを持つSTRINGリソース

36:デフォルトの名無しさん
16/11/08 22:03:34.52 fDzF2sx9.net
>>35
ありがとうございます
以下で無事できました
URLリンク(nsoft.blog60.fc2.com)

37:デフォルトの名無しさん
16/11/16 21:31:23.35 7nJMKxmy.net
ちょっとiconの相談です
MFCでプロジェクト作った際、アプリのicon(IDR_MAINFRAME)にいろんなイメージタイプ
(サイコロ3つ)が作られるけど私は全部設定するの面倒なので32x32 8bit bmpだけ
作って他全部消すようにしてます。皆さんはどうしてます?
いろんな環境に対応するためにあ-いうことしてるのかなーとは思うんだけど..

38:片山博文MZ ◆T6xkBnTXz7B0
16/11/16 21:43:12.65 qcIR6hue.net
>>37
アイコンのイメージ作成にはInkscapeを使ってるよ。
お金に余裕があればAdobe Illustrator使えばいいんじゃないかな。
32x32だけだとユーザーに汚い画像を見せることになる。

39:デフォルトの名無しさん
16/11/16 22:59:39.33 qcIR6hue.net
>>38
Inkscape(笑) ダセーw

40:片山博文MZ ◆T6xkBnTXz7B0
16/11/16 23:02:25.51 qcIR6hue.net
>>39
氏ね

41:37
16/11/16 23:54:39.55 7nJMKxmy.net
> 32x32だけだとユーザーに汚い画像を見せることになる。
解像度を変えてのテストはある程度してるけどあまり気になったことないなー
私の想定を超えたデバイスだと汚くなるのかな?Inkscapeは落とした。勉強してみます。
片山博士は大きく&色彩豊かなicon作った後でInkscape使って縮小/減色してるの?

42:片山博文MZ ◆T6xkBnTXz7B0
16/11/17 00:07:27.86 TXdVmO9D.net
Inkscapeで256x256ピクセル(Vistaサイズ)にしてから図形を描いてとりあえず保存すればSVG形式ファイルになる。
「ファイル」メニューの「PNG形式でエクスポート」を選べばPNG画像が吐き出される。
それを16x16,32x32,48x4864x64に縮小して、見辛いピクセルを細かく補正してからアイコン作成ソフトに取り込むとアイコンができる。

43:片山博文MZ ◆T6xkBnTXz7B0
16/11/17 00:15:30.72 TXdVmO9D.net
Inkscapeは図形の合成などの強力な編集機能があるが、
図形が足りなければワード、エクセルの図形をコピペすればいい。

44:片山博文MZ ◆T6xkBnTXz7B0
16/11/17 00:23:23.58 TXdVmO9D.net
時間がないときは文字アイコンだね。1文字をアイコンにするだけで
インパクトあるかもしれない。

45:片山博文MZ ◆T6xkBnTXz7B0
16/11/17 00:29:46.37 TXdVmO9D.net
「アンチエイリアス」がかかると、どうしても細部がぼやけてしまう。
小さいアイコンでは、ユーザーにはっきり見えるように微細な加工をした方がいい。

46:デフォルトの名無しさん
16/11/17 07:07:34.33 gXcsVs3+.net
片山ueeeeeeeeeeeeeeee

47:37
16/11/17 07:08:48.33 0g51nw+9.net
詳しい説明ありがとう

48:デフォルトの名無しさん
16/11/18 16:59:51.57 +QqWh5ch.net
片山先生はアイコン一つにも手を抜かないんだな。
お前らも見習うべき

49:デフォルトの名無しさん
16/12/20 20:31:33.27 TcHawI4o.net
CListView(LVS_OWNERDATA style指定)で特定の行の選択を禁止したいのですが
LVN_ITEMCHANGINGはOWNERDATAの場合は送られない様です。by msdn
何か良い方法は無いでしょうか。
クリックやENTERを潰すしかないんでしょうか?

50:49
16/12/26 20:33:00.82 LBPR2r0v.net
選択禁止は諦めました。
選択された後、近くの行を強制的に選択状態にするようにししたら、あまり違和感がなかったので、これでごまかします。

51:デフォルトの名無しさん
17/01/17 18:47:51.47 BjvebHTO.net
CArrayの質問なんですが、
CArray<int> test;
test.SetSize(10);
とやった場合、test[0]~test[9]までの値は、
0で初期化されていることは、前提として良い動作ですか?
ソースを見たところ、SetSize()で確保したバッファをいったんゼロクリアして、
その後、各要素に対してコンストラクタが呼ばれるようなので、
C++のintのコンストラクタが「なにもしない」という仕様なら大丈夫そうですが。

52:デフォルトの名無しさん
17/01/18 20:04:22.77 dWVIY9sh.net
intのようなプリミティブな型にもコンストラクタってあるの?
知らなかった

53:デフォルトの名無しさん
17/02/06 23:41:58.25 sJV81fCO.net
MFCでリボンアプリケーション組もうとしてるんですけど、
リボンデサイナでダイアログボックス起動ツールのボタンは
付けられないのでしょうか?
例えばWORDとかでフォントグループの右下にある小さい四角いボタンです。

54:デフォルトの名無しさん
17/02/15 15:11:12.80 WDBEc38A.net
MFCでCEditをサブクラス化したいと思うのですがうまくいきません
サブクラス化時にFromHandlePermanetと言う関数が呼ばれてそこでASSERTに引っ掛かってしまいます
MSDNによると「SubclassWindowを呼び出す時、ウィンドウがMFCオブジェクトに結びつけられていないようにしろ」とあります
馬鹿で申し訳ないのですが、ウィンドウがMFCオブジェクトに結びつけられるのはどのタイミングなのでしょうか?
今はCEdit::Create後にサブクラス化を試みています

55:デフォルトの名無しさん
17/02/15 15:59:13.06 IaTHaUdU.net
>>53
ああ、あの2ミリ角くらいの小さな四角ね。

56:片山博文MZ ◆T6xkBnTXz7B0
17/02/15 16:57:51.66 sI0w68I3.net
>>54
CEditをダイアログエディタで作成したなら、すでにMFCの管理下にある。
サブクラス化する必要はない。作成したCEditメンバーを使えばいい。

57:デフォルトの名無しさん
17/02/15 17:29:15.59 WDBEc38A.net
>>56
ありがとうございます
しかしながらCEditから派生させたクラスをnewを使用して動的に作成しています
newによりインスタンスを動的に作成

Createメンバ関数を呼び出しコントロールを作成

サブクラス化

ASSERT

58:デフォルトの名無しさん
17/02/15 17:43:20.32 WDBEc38A.net
途中で送信してしまいました
現状はこんな感じでアサートに引っ掛かってしまいます
デバッガで追うとウィンドウのMAP(?)にサブクラス化対象のウィンドウが既に存在しているとアサートされるようなのですが、このウィンドウマップにどこで登録されるのかが解りません
マップに登録される=MSDNの言う「ウィンドウをMFCオブジェクトに結び付ける」と言うことなのかと推測しています

59:デフォルトの名無しさん
17/02/15 17:49:31.94 urFAvqLF.net
その工程ならサブクラス化はいらないはず
でもウィザードを使わずにクラスを作ったら
おまじないマクロがついてこないんじゃないかな
後始末のときにオブジェクト開放が先かウインドウ破棄が先かってのも迷う

60:デフォルトの名無しさん
17/02/15 19:18:20.41 WDBEc38A.net
>>59
ありがとうございます
説明不足で申し訳ありません
そもそも何故エディットボックスをサブクラス化したいかというとエディットボックスのコンテキストメニューを改造したいためなのです
エディットボックスにくるWN_RBUTTONDOWNをトラップするため、サブクラス化が必須になっている次第です

61:デフォルトの名無しさん
17/02/15 19:36:45.27 sI0w68I3.net
>>60
URLリンク(www.ne.jp)

62:デフォルトの名無しさん
17/02/15 19:40:04.43 8VpWPRqB.net
Createするから既存になってしまうんじゃないの?
>>57でいうサブクラス化ってSubclassWindow? SubclassDlgItem?
CEditのサブクラスは時々使うけどSubclassWindow経由では使ってないので
外してたらスマソ

63:62
17/02/15 19:46:05.27 8VpWPRqB.net
私がやるのは
URLリンク(support.microsoft.com)
の一番下のやり方。

64:デフォルトの名無しさん
17/02/15 19:51:10.47 uPR4+QIT.net
自分でサブクラス化したときはDDX_Controlを削らないとうまく動いてくれなかったような気がする。
正解は知らんが。

65:デフォルトの名無しさん
17/02/15 19:57:49.61 IaTHaUdU.net
>>60
mfcは昔やっててもう忘れかけだが
マウスボタンをトラップする程度なら
サブクラス化なんて不要なんじゃないか?

66:デフォルトの名無しさん
17/02/15 20:56:19.16 WDBEc38A.net
>>62
ありがとうございます
SubclasDlgItemを使っています
ですがデバッガで追うと結局は内部でSubclassWindowをを呼び出しているのは確認しています

67:デフォルトの名無しさん
17/02/15 20:58:48.04 WDBEc38A.net
>>64
ありがとうございます
DDXは使っていません
リソースにエディットボックスコントロールを貼りつけてはおらず、プログラム中でCEditクラスを派生したクラスを動的に作成しています

68:デフォルトの名無しさん
17/02/15 21:01:57.77 WDBEc38A.net
>>65
エディットボックスのマウス右クリックはサブクラス化が必要なようです
でも確かになにかコンテキスト~というメッセージがあったような気もしないでもないのですが…
WEBで調べた限りですと右クリックメッセージをフックしているのしか出てきませんでした

69:62
17/02/15 21:37:49.75 8VpWPRqB.net
回答ではなく代替案ですが
1. CEditのサブクラスでOnContextMenuをオーバーライドしてメニュー処理を記述。
2. URLリンク(support.microsoft.com)
  中の
  また、CDialog::DoDataExchange() で DDX を使用して..
  のやりかたで CEditをCYourEditに変更。
で独自のコンテキストメニューは出ますよ。

70:デフォルトの名無しさん
17/02/15 21:47:42.01 WDBEc38A.net
>>69
おおおお!!!
ありがとうございます!
早速試してみます!


と思いましたが、今日はもう事務所が閉まるそうです…
早速明日試してみます!
ありがとうございました!

71:デフォルトの名無しさん
17/02/20 02:48:59.49 oIbcE82M.net
明日もあさっても過ぎたんだけど、どうなったんだろうね。

72:デフォルトの名無しさん
17/02/22 11:13:17.19 T1tKwjPz.net
事務所をロックアウトされて入れません

73:デフォルトの名無しさん
17/02/27 15:33:23.44 APOfiEEu.net
>>71
これは失礼しました
解決しましたのでご報告致します
結果的にはサブクラス化出来ました
動的にCEditを生成した際、実際のコントロールをCriateメソッドで生成すると思いますが一旦生成してしまうとサブクラス化できないようです
CMyEdit pualic CEdit として派生
CMyEdit lpCMyEdit = new CMyEdit;
lpCMyEdit->SubclassWindow(...←ここでサブクラス化
lpCMyEdit->Crate(...←コントロール作成
上記の手順でサブクラス化できましたのでWM_CONTEXTやWM_CHARに対してメッセージトラップが可能になりましたので全て実現できました
MFCのいう、ウィンドウの関連付けというのは恐らくコントロール作成時にWindowMapというMFCのクラスに登録されることかと思われます
改めて色々と相談に乗っていただき有り難うございました
また何かありましたら質問させて頂きます
>>72
間一髪間に合いました

74:デフォルトの名無しさん
17/02/27 15:36:16.33 APOfiEEu.net
>>73
誤字が…多かったです、すみません

75:デフォルトの名無しさん
17/03/02 18:53:27.03 5095SEQp.net
>>73
リソースにエディットがないのに、SubclassWindow()を呼び出したって…
一体何をサブクラス化したんだろう…
リソースにエディットがなければ Create() だけでいい
リソースにエディットがあるなら SubclassWindow() だけでいい
(この場合は、69さんの2のやり方が普通だと思う)

76:62
17/03/02 19:31:25.20 icVxeh77.net
改めてよく読んだらおかしいねw
SubclassWindowのパラメータに何を渡したんだろう
本人が解決したって言ってるんだから別にいいけど

77:デフォルトの名無しさん
17/03/02 19:58:19.05 i8opxKVO.net
>>75
MFC使い方がよくわかってなくて混乱させているようで誠に申し訳ないです…
CEditをnewにて動的に作っていますのでリソースは一切使っていないです
具体的にはエクセルのシートの様な格子形のグラフィックを描画し、そのカラムをクリック等された際にエディットボックスを動的にカラムの座標に作っています

78:デフォルトの名無しさん
17/03/03 12:50:31.31 fzOn+GKU.net
>>76
SubclassWindowにはCEdit派生の独自クラスを渡しています
自分は普段SDKしか使わないためSDKの感覚なのですが、ウィンドウのサブクラス化とは、サブクラス化したいウィンドウハンドルのウィンドウプロシジャのアドレスを別途作成した独自ウィンドウプロシジャのアドレスと差し替える事と認識しています
ですのでSubclassWindowに渡すハンドルはサブクラス化したいウィンドウのハンドルと思っていましたが何か別のパターンがあるのでしょうか?

79:デフォルトの名無しさん
17/03/03 16:16:47.27 Mc9uDdoy.net
>>78
> CMyEdit public CEdit として派生
> CMyEdit* lpCMyEdit = new CMyEdit;
ここでは、まだウィンドウは無い (コンストラクタに小細工がなければ)
> lpCMyEdit->SubclassWindow(...←ここでサブクラス化
もし以下のように書いたとしても、ハンドルは NULL だからサブクラス化できない
lpCMyEdit->SubclassWindow(lpCMyEdit->GetSafeHwnd());
> lpCMyEdit->Create(...←コントロール作成
この中で、ウィンドウが作成されサブクラス化される
なので SubclassWindow() の明示的な呼び出しは不要

80:デフォルトの名無しさん
17/03/03 20:49:57.22 GdXfDzVm.net
>>78
CEditをどういう風にカスタマイズしたいのかわからんが
>CEdit派生の独自クラス
の段階でそれを実装できないの?
通常サブクラス化を必要とするのは(通常の手段では)派生クラスを置けないダ
イアログ上のコントロールに対しての場合のみで、そうで無い場合は必要な機
能を実装したCEdit派生クラスをCreate()するだけで実現できると思うんだが・・
MFCでは(メッセージマップの仕掛けによって)ほぼ全てのメッセージを派生ク
ラスで独自処理を行えるので、サブクラス化は必要ないはずです。

81:デフォルトの名無しさん
17/03/03 21:07:16.24 4N2nnk0c.net
>>77
>具体的にはエクセルのシートの様な格子形のグラフィックを描画し…
これ自分もやったなー
作り込んで思い通りに動いたときは気持ちいいよね

82:デフォルトの名無しさん
17/03/03 23:45:50.26 fzOn+GKU.net
>>79
なるほど、確かに仰る通りです
MFCだと定義済みコントロールを作成したタイミングでサブクラス化が自動的に行われているんですか…知らなかった…
SubclassWindowの戻り値を確認してみます

83:デフォルトの名無しさん
17/03/03 23:47:56.70 fzOn+GKU.net
>>80
はい、とりあえずは、WM_CHARとWM_CONTEXTMENUをトラップしたいのです
どうも私の勘違いでサブクラス化は不要なんですかね…

84:デフォルトの名無しさん
17/03/03 23:49:20.96 fzOn+GKU.net
>>81
そうなんです
失敗が多い分、成功の歓びがあります

85:デフォルトの名無しさん
17/03/04 06:08:14.80 5oPjtzPk.net
>83
不要

86:デフォルトの名無しさん
17/03/12 16:57:53.13 L/+Vp36z.net
>>85
はい、SubclassWindowは失敗していました
みなさんの言う通りコントロール作成時に暗黙にサブクラス化が行われているようです
とても勉強になりました
有り難うございます

87:デフォルトの名無しさん
17/03/12 20:13:37.36 g7gIuH2o.net
そもそもなぜサブクラス化って言うの?
クラスとは関係ないと思うんですが

88:デフォルトの名無しさん
17/03/12 20:23:14.61 DJd+bif5.net
サブクラス化というネーミングはイマイチだとずっと思ってた。
APIの名称から来てるから翻訳者に罪はないが、、
VS2017入れてみたけど_MFC_VERは変化なし。
残念だ。

89:デフォルトの名無しさん
17/03/12 20:33:34.83 l5dI0q1q.net
>>87
多分ウィンドウクラスを横取りするからじゃないかな?

90:デフォルトの名無しさん
17/04/02 01:00:25.54 4o8Jb7FT.net
実際クラスとは関係ないと思う
ファーストクラスとかも全然クラス関係ないし
英語にそういうニュアンスがあるんじゃないの

91:デフォルトの名無しさん
17/04/13 15:17:28.33 O8cH7Ezk.net
Windows1.0のときからあるし、オブジェクト指向の用語とは別路線で発生したもんだしなあ

92:デフォルトの名無しさん
17/04/13 21:53:13.05 rVYtPk7E.net
GUI自体がオブジェクト指向の影響下で発展してきたわけで、別路線ってことはないだろう。
ウィンドウクラスごとにそれぞれ異なるWinProcを指す仕組みなんてほとんどv-tableだし。

93:デフォルトの名無しさん
17/04/14 10:48:36.47 L6e5ZQwW.net
確かWin32APIはsmalltalk由来のメッセージパッシング式オブジェクト指向を意識して作られたとかなんとか。
んで、C++はメッセージパッシング意識して作られてなかったから、言語自体を拡張されたのがC++Builderで、言語は拡張せず、メッセージテーブル作って無理くり対応したのがVCのMFCって何かで読んだ。
そう考えるとMFC以前はCでどうにかオブジェクト指向と言うより、メッセージパッシングを実現しようとしてWin32APIが出来たんだろね。

94:デフォルトの名無しさん
17/04/16 20:06:30.26 5A0Iky+5.net
Win16の存在が消されてる...

95:デフォルトの名無しさん
17/04/17 00:21:05.80 6QpAECc+.net
生まれてなかったんで。
そう言えばWin16sとの互換性のためとか勉強した覚えある。

96:デフォルトの名無しさん
17/04/17 00:52:44.41 tarAwmvI.net
win32sならやったけど、Win16sは知らないなあ。

97:デフォルトの名無しさん
17/04/17 08:58:12.02 V9IKpLf1.net
揚げ足どりにも程があるw

98:デフォルトの名無しさん
17/04/27 23:52:23.90 fIPmJDul.net
IT業界を離れて10数年経つ者です。
いまどき高速なアプリを手軽に作りたい場合、現役の方はどういう環境で作っています?
当時は主にMFC、たまにC++Builderでやってました。重くても良い場合はVBも使いました。
出来れば今後10年使えそうな奴をお願いします。今もたまに簡単なツールを作る機会が
ありますが、その際はMFCで作っています。多少勉強する覚悟はあります。
よろしくお願いします。

99:デフォルトの名無しさん
17/04/28 01:05:33.78 1gQE0OT9.net
>>98
>出来れば今後10年使えそうな奴をお願いします。
ない。

100:デフォルトの名無しさん
17/04/29 20:05:07.24 cs4H/lwY.net
>>98
本当に経験者ならこんな質問はしないやな

101:デフォルトの名無しさん
17/04/29 21:27:44.34 p2ephTDn.net
>>98
C#

102:デフォルトの名無しさん
17/05/01 17:24:45.69 tRarccr2.net
C#やっときゃなんとかなる

103:デフォルトの名無しさん
17/05/01 22:10:24.46 ybWlfBdW.net
WPFやUWPは廃れても、C#とXAMLは残ってそう。
C++とMFCも地味に残ってるだろうけど。。。

104:98
17/05/01 23:13:30.10 MV/lR732.net
ご意見ありがとうございます。
参考にします。

105:デフォルトの名無しさん
17/05/07 20:46:12.14 904pYcPE.net
C#意外と人気なんだな・・・驚いた

106:デフォルトの名無しさん
17/05/10 00:20:17.07 +OKBVlnQ.net
MFCで印刷プレビューのリボンバーってどうやってカスタマイズするの??

107:デフォルトの名無しさん
17/05/23 19:47:17.95 U7efYych.net
MDIの子ウィンドウのハンドルはどこですかぁ~

108:デフォルトの名無しさん
17/05/24 06:22:57.52 r4nnDW8T.net
>>107
CDocument::GetFirstViewPosition
CDocument::GetNextView

109:デフォルトの名無しさん
17/05/30 19:18:12.89 R0a35IVC.net
> CCriticalSection オブジェクトの使用方式は、2 とおりあります。
> スタンドアロン方式、およびクラスに埋め込む方式です。
>
> スタンドアロン方式
> CCriticalSection オブジェクトをスタンドアロンで使うには、
> 必要が生じたときに CCriticalSection オブジェクトを構築します。
> コンストラクタから正常に戻った後、Lock を呼び出してオブジェクトを明示的にロックします。
> クリティカル セクションへのアクセスが完了したら、Unlock を呼び出します。
> この方法はソース コードを読んだ人にはわかりやすいのですが、
> アクセスの前後でクリティカル セクションをロック、アンロックすることを
> 覚えておかなければならないため、エラーを引き起こす傾向があります。
> より望ましいのは、CSingleLock クラスを使う方法です。
> この場合も Lock メソッドおよび Unlock メソッドを使いますが、
> 例外が発生したときにリソースのロックを解除する必要はありません。
>
> 埋め込み方式
> CCriticalSection 型のデータ メンバをクラスに追加し、
> 必要に応じてロックすると、複数のスレッドでクラスを共有することもできます。
MSDNのCCriticalSectionの説明には、上のように書かれているのですが、
このスタンドアロン方式って、どういう意図なのでしょうか。
普通に読めば、関数の内部でローカル変数として宣言するように思えるのですが、
それだと全く排他制御になっていないのでは?

110:デフォルトの名無しさん
17/05/31 00:18:49.47 VxTDzTEq.net
Mutexみたいに名前付きなら上のスタンドアロン方式も理解できるけど名前ないからなー
わかんね

111:デフォルトの名無しさん
17/05/31 10:12:23.47 7kWP6r82.net
CCriticalSectionインスタンスが同期オブジェクトなわけではないよ。
クリティカルセクションは名前の通りクリティカルな区間のこと。Win32APIのEnterCriticalSection()からLeaveCriticalSection()の区間。
CCriticalSectionはこれのラッパー。
クリティカルセクションに入るスレッドはプロセスで一つだけになる。
プロセス間排他はできない代わりに軽い。
同期オブジェクトがプロセスで一つだけになのと同義。
マルチコア・マルチスレッドでロック待ちが無視できなくなるようなら他の使う。

112:デフォルトの名無しさん
17/05/31 13:08:02.66 ZVZYbrmW.net
>>111
クリティカルセクションという用語は>>111の言う様に元々「クリティカルな区間」のことだが、Win32では
スレッド間排他処理のための同期オブジェクトとして"CRITICAL_SECTION"があり、CCriticalSectionはこのラッパー。
( URLリンク(msdn.microsoft.com) にも"「クリティカル セクション」は、Win32の基本的な同期オブジェクトの1つです。"と書かれている)
>>109
確かにその説明はチンプンカンプンだねえ。
推測だけど、たとえばCStringをスレッド間排他制御するために
CString strFoo ;
CCriticalSection csForFoo ; // 非AUTO
 :
csForFoo.Lock() ;
strFoo += strBar ;
csForFoo.Unlock() ;
 :
みたいに書く(定義上はcsForFooはstrFooと結びついていない)のが、「スタンドアロン方式」で
class CThreadSafeString : public CString {
private:
 CCriticalSection csForMe ;
public:
 void ThreadSafeAppend( LPCSTR p ) {
  csForMe.Lock() ;
  *this += p ;
  csForMe.Unlock() ;
 }
} ;
みたいに書く(クラスに排他処理を埋め込む)のが「埋め込み方式」じゃないかなあ。
で、いずれの方式でも上記のような記述では「クリティカルな区間」で例外が発生するとUnlock()が実行されないので、これを避けるため、CSingleLockクラスを使えと。

113:デフォルトの名無しさん
17/06/04 22:05:56.04 rXndkeA4.net
>>110-112
解説ありがとうございます。
> CCriticalSection csForFoo ; // 非AUTO
>  :
> csForFoo.Lock() ;
> strFoo += strBar ;
> csForFoo.Unlock() ;
この使い方が当初の疑問だったのですが、
このローカル変数としての使い方って、意味ありますか?
試しに同じような処理を作って、複数のスレッドから同時に呼んでみても、
全く排他制御されているように見えなかったのですが。

114:デフォルトの名無しさん
17/06/05 10:47:00.10 CcS2OTgy.net
>>113
>>112
>CCriticalSection csForFoo ; // 非AUTO
URLリンク(detail.chiebukuro.yahoo.co.jp)
>>109
>普通に読めば、関数の内部でローカル変数として宣言するように思えるのですが、
思えない
ローカル変数にも、ブロックローカル・関数ローカル・ファイルローカルがあり、
ブロックローカル・関数ローカルにも非静的変数と静的変数がある。

115:デフォルトの名無しさん
17/06/05 12:03:45.22 umvVrk12.net
>>114
> CCriticalSection csForFoo ; // 非AUTO
>  :
> csForFoo.Lock() ;
ああ、このcsForFooは関数内の自動変数ではなくて、
関数外なり静的変数なりで定義されているものいうことでしたか。
> 普通に読めば、関数の内部でローカル変数として宣言するように思えるのですが
の「ローカル変数」は、「自動変数」の意味でした。
失礼しました。

116:デフォルトの名無しさん
17/06/05 19:28:46.05 SdDD09qt.net
>>109の原文(MSDN)には
construct the CCriticalSection object when it is needed.
と書かれているからCCriticalSection objectはオート変数と解釈してもおかしくは無い気がする。
staticならあらかじめになってしまう。

117:デフォルトの名無しさん
17/06/06 17:22:09.38 2bddCvIA.net
>>116
「コンストラクタから正常に戻った後、Lock を呼び出して」
とも書いてあるので、普通に読めば自動変数ですよねぇ。
でも、自動変数のCCriticalSectionをロックしても排他制御になっていないはずだし、
これはどういう意図なんだろうか、という質問でした。

118:デフォルトの名無しさん
17/11/29 18:24:25.41 HFlnlUlA.net
MFC MDIで2つのメニューを出したいので、mainframeにCMFCMenuBarを2つ作って、2つCreateすると、2つ目のCreateはAssertでとまってしまいます。2つのメニューを表示させる方法はありませんか?

119:デフォルトの名無しさん
17/11/30 13:32:53.51 isxZpuq9.net
>>118
「Method should be called once!」
なんてコメントが入ってるくらいだから、メニューは一つという設計なんだろう。
CMFCToolBarにCMFCToolBarMenuButtonを並べたほうが早いかも。
見た目を完全にメニューと合わせるなら、派生クラスを作ってオーバーライドする必要もあるだろうけど。

120:デフォルトの名無しさん
17/11/30 20:04:53.18 9ANPxZI+.net
menuボタンを並べるのは良いアイデアだと思います。IEdemoというサンプルを見ていたら、LinkBarというクラスを作って使っていました。2つのメニューは、やはり初期化しないのが良さそうです。1つは別の物にしてみます。ありがとうございます!

121:デフォルトの名無しさん
17/11/30 23:13:55.12 9ANPxZI+.net
IEDEMOのMFCコード、なかなか思い道理に動きません。MDIでサンプルを作って、CLinksBarとCLinksButtonを移植しようとしましたが、表示がバグります。バグっているけれどマウスカーソルをあてると、TOOLTIPが表示されます。何かが足りないようです。難しい

122:デフォルトの名無しさん
17/12/01 09:35:49.83 /UAM0shb.net
>>121
>>121
実際に見ていないからわからないけど、
ツールバーの情報は標準でレジストリに保存されてしまうから、
開発中は定期的にレジストリを消さないといろいろ原因不明の現象は起こる。
一度消してみたらどうかと。
ちなみに、m_wndToolBar.LoadToolBar()のあとに以下の処理を入れたら、
とりあえずツールバーにメニューを出すサンプルにはなる。
(これも一度レジストリの削除は必要)
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
for (UINT i = 0; i < menu.GetMenuItemCount(); i++) {
  CString strText;
  menu.GetMenuString(i, strText, MF_BYPOSITION);
  m_wndToolBar.InsertButton(CMFCToolBarMenuButton(-1, menu.GetSubMenu(i)->GetSafeHmenu(), -1, strText));
}

123:デフォルトの名無しさん
17/12/01 23:29:26.56 658qbITu.net
>>122さんのおかげで先に進めました。
下記のようにしたら、思い通りのメニューが出て、しっかり動いてくれました。
/*
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
{
TRACE0("ツール バーの作成に失敗しました。\n");
return -1; // 作成できない場合
}
*/
m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
CMenu menu;
menu.LoadMenu(IDR_MENU_2);
for (UINT i = 0; i < menu.GetMenuItemCount(); i++) {
CString strText;
menu.GetMenuString(i, strText, MF_BYPOSITION);
int menuID;
menuID = menu.GetMenuItemID(i);
m_wndToolBar.InsertButton(CMFCToolBarMenuButton(menuID, menu.GetSubMenu(i)->GetSafeHmenu(), -1, strText));
}
Toolbarはとても難しいですね。私だけではとても思い通りの物は作れませんでした。>>122さんありがとう!

124:デフォルトの名無しさん
17/12/09 13:03:41.75 6uVA15bl.net
MDIで色々ウインドウを出すと、チャイルドウィンドウのタイトルバーが:1 :2になったり、消えてしまったりします。特に後ろになったチャイルドウィンドウのタイトルバーが書き換わって、タイトルが消えてしまう問題に頭を痛めております。
CWNDクラス内などにウインドウタイトルの情報を保持していて、時々その保持している情報で書き換えているように思うのですが、保持している情報がどれなのか、書き換えられるのかわかりません。
今の所OnPaint内でGetParent()->SetWindowTextで書き換えているのですが先のようにチャイルドウインドウが後ろに回るとタイトル表示が消えたりします。なにか良いタイトルバーテキストの書き換え方法は有りませんでしょうか?

125:デフォルトの名無しさん
17/12/12 18:12:33.03 /EihAdTu.net
124が消したり書き換えているんだと思う。
素のMDIプロジェクト作ってもそういう動きになる?

126:デフォルトの名無しさん
17/12/12 22:35:42.07 CKA01eZH.net
 素のMDIプロジェクトだとなりません。素のままだとタイトルバーがチャイルドウインドウの数に応じてプロジェクト名+1,2,3と表示されてしまいます。
 チャイルドウインドウのFormView別にチャイルドウインドウのタイトルを変化させたいのですが、うまくいきません。
 タイトルバーをもっと思うように書き換える方法を探しております。

127:デフォルトの名無しさん
17/12/12 23:44:01.59 /EihAdTu.net
CDocumentのサブクラスでSetTitle(LPCTSTR lpszTitle)をオーバーライドして独自のタイトルを付けるのはどうかな。
よく覚えてないけど独自のタイトルじゃなくlpszTitleを加工しようとすると嫌な感じにハマった記憶が、、

128:デフォルトの名無しさん
17/12/13 09:22:41.41 lt+jgkVB.net
>>124
CMDIChildWnd::OnUpdateFrameTitle()をオーバーライドしてみては。
何科変化するたびにこの関数が呼ばれるし、
デフォルトの処理だと、ここで":1"とか追加している。

129:デフォルトの名無しさん
17/12/13 09:23:33.82 lt+jgkVB.net
×


130: 何科 ○ なにか



131:デフォルトの名無しさん
17/12/13 12:23:45.29 h/Ab3OoN.net
>>127さん
 CDocumentのサブクラスCDocumentExを作ってSetTitleをオーバーライドしてみました。
 その他、ドキュメントクラスはCDocumentからの継承ではなくCDocumentExから継承させるようにしてみたのですが、CDocumentEx::SetTitle関数は呼ばれないようです。
 CDocumentクラスのオーバーライドではだめかもしれません。
>>128さん
ちょっと試してみます!

132:デフォルトの名無しさん
17/12/13 18:07:57.07 xRSHjr6s.net
>CMDIChildWnd::OnUpdateFrameTitle()をオーバーライドしてみては。
 OnUpdateFrameTitleをオーバーライドして、親クラスのメソッドをよびにいく時のパラメーターをfalseにしてみたところ、チャイルドウインドウのタイトルが書き換わらなくなりました。
 ありがとうございます!

133:デフォルトの名無しさん
17/12/25 18:31:00.49 1KZX1+KX.net
 mfcで見た目の良い(テーマを適用した)ラジオボタンを出したいと思っています。ところが、ラジオボタンのクラスとして、CMFCRadioButtonというクラスがありません。
 恐らくCMFCButtonクラスのインスタンスを生成してラジオボタンとして用いるのかなと悩み、CMFCButtonクラスの継承でCMFCRadioButtonクラスが作れないものか、考えています。
 CMFCRadioButtonクラスは作ってみた物の、CMFCRadioButtonクラスのOnDrawが呼び出されません。CMFCタイプのラジオボタンを生成する良い方法はございませんか?

134:デフォルトの名無しさん
17/12/26 09:21:22.00 pmYcZWoZ.net
>>132
virtual void OnDraw(CDC* pDC, const CRect& rect, UINT uiState);
をオーバーライドしたら、ちゃんと呼ばれているように見えるけど。

135:デフォルトの名無しさん
17/12/26 12:13:07.59 SnpEsSKI.net
リソースではラジオボタンを定義しておいて、DDXCONTROLからCMFCRadioButtonクラス(CMFCButtonクラス派生)とひもづけると、外観がボタンになってしまいます。
 外観はボタンですが、確かにCMFCRadioButtonクラスのOnDrawは呼び出されます。
 外観がボタンではなく、ラジオボタンにする方法をご教示下さい。

136:デフォルトの名無しさん
17/12/26 12:55:18.72 pmYcZWoZ.net
>>134
CMFCButtonの標準の描画処理がボタン前提になっているので、
ラジオボタンの見た目を表現したいなら、
OnDraw()などをオーバーライドして自分で完全に描画するしかないかと。
そもそも、CMFCButtonではなくCButtonにしてしまえば、
Windowsのテーマに従ったものは描画されるけど、
そうではなく、CMFCVisualManagerのテーマのことでいいんだよね?
最新のMFCは知らないけど、2008で導入されたときのMFCは、
ダイアログや内部のコントロールのテーマ描画は対応してない。
ライブラリの元となったBCG社が、機能を別売りしている。
URLリンク(www.bcgsoft.com)

137:デフォルトの名無しさん
17/12/26 19:16:10.15 85Qwpz2C.net
2008年にMSがBCGを買収してCommunityEditionにこれが入っていたら、、と思う。

138:デフォルトの名無しさん
17/12/26 20:03:16.51 U4eSFsG2.net
 CMFCVisualManagerでたぶんあっています。
 mfcのコンパイルオプションをUnicodeモードにすると、ラジオボタンの見た目が変わることは分かったのですが、ANSI(ShiftJIS)モードでコンパイルしたいのです。
 今気になっているのは、manifestファイルを追加してみようと思います。
URLリンク(gurigumi.s349.xrea.com)

139:デフォルトの名無しさん
17/12/26 20:28:21.70 SQt/8UlT.net
>>137
それはCMFCVisualManagerではないぞ。
Windowsのテーマのほうだ。

140:デフォルトの名無しさん
17/12/26 21:53:49.91 lgrMwj5m.net
マルチバイト文字モードでコンパイルした場合の見た目の違いです。DDXControlで左はCButton右はCMFCButtonとひもづけました。
URLリンク(i.imgur.com)

141:デフォルトの名無しさん
17/12/26 22:19:37.75 lgrMwj5m.net
やはりmanifestファイルのようです。マニフェストファイルでラジオボタンは変化しました。
マニフェスト適用後
URLリンク(i.imgur.com)
マニフェスト適用前
URLリンク(i.imgur.com)

142:デフォルトの名無しさん
17/12/30 19:20:54.71 W7MN//Qp.net
このスレはVisualStudioの使い方、
質問はアプリケーションの作り方
微妙に違うといえば違う。
かといって誘導出来る適当なスレは見当たらない
MFCのスレくらいかな

143:デフォルトの名無しさん
17/12/30 20:06:14.31 k3f51DlY.net
mfcのスレでmfcのクラスに関する質問をしていますよ。

144:デフォルトの名無しさん
18/01/06 20:47:11.78 wtVvXwwo.net
Excelでキャレットの無い状態から日本語入力をするとテキストボックス?が現れて文字が未確定状態で表示されますが
同様な動きををCViewとCEditでやろうとしています。
以前はViewのOnCharからCEditにWM_CHARをポストすることで普通に動いていたのですが、OSの仕様が変わったのか
最初の1文字が確定状態で表示されてしまいます。ATOKもMS-IMEも同じです。
何かヒントがあれば教えてください。

145:デフォルトの名無しさん
18/01/11 02:22:52.84 azQtlc4c.net
excelでキャレットの無い状態というのがわかりません。^が無い状態で入力を開始するのでしょうか?

146:デフォルトの名無しさん
18/01/11 22:28:59.70 nH81YmjO.net
>>144
レスありがとうございます。
Excelを起動した直後、あるいはセルへのキーボード入力が完了した直後など、矢印キーでカーソルが動く状態のことです。

147:デフォルトの名無しさん
18/01/11 22:30:38.90 nH81YmjO.net
文字入力時に点滅する「I」のような記号がキャレットです。

148:デフォルトの名無しさん
18/01/12 22:01:33.38 mgMC0phM.net
回答になっているかどうか分からないのですが、CViewクラスではない場合でCListCtrlクラス内にCEditを貼り付けて、そのCEdit上で編集をする例は有ります。
CView上にCEditを張り付けているような応用にもかなるかもしれませんので、例を上げます。
URLリンク(www.softist.com)

149:デフォルトの名無しさん
18/01/13 18:52:00.81 CyFncowx.net
>>147
レスありがとうございます。
ダブルクリックでCEditを出して~という動作は当方でも問題なく出来ています。

150:デフォルトの名無しさん
18/01/29 00:24:27.95 lYpQ/Knz.net
すみませんお助けください
親ウインドウにテキストボックスとボタン、ボタンを押すとdomodalでウインドウが呼び出されます
その子ウインドウにはリストボックスがあって、そこには親のテキストボックスに入力された文字が表示される
そういうものを作ろうとしています
親テキストボックスの変数名がm_input
setvalueでプライベートにしてるリストボックス変数にそれを格納しています
ですがこれですとウインドウは表示されてもリストボックスはからっぽです。
一体何が悪いのでしょうか
void 親ウインドウクラス名::OnBnClickedButton1()
{
PopupDlg pdlg;
UpdateData(TRUE);
pdlg.setValue(m_input);
pdlg.DoModal();
UpdateData(FALSE);
}

151:デフォルトの名無しさん
18/01/29 09:13:09.91 TsZXtod4.net
>>149
setValueの引数の型や、それをPopupDlgがどのように扱っているのかを見せないと、
それだけではなにもわからないよ。

152:デフォルトの名無しさん
18/01/30 19:55:15.15 JKI/Ug3X.net
すっかり遅くなったけど申し訳ない
oninitdialogに処理書いたらなんとかなりました

153:デフォルトの名無しさん
18/02/08 23:58:28.60 /8AuktPL.net
MDIウィンドウの場合で、メニューのフォントとフォントサイズは変えられますか?
ツールバーの右端に出てくるボタンの表示非表示を無くすことは出来ますか?

154:デフォルトの名無しさん
18/02/09 09:43:56.52 DYanFj/G.net
>>152
MFC Feature Packのメニューやツールバーのことなら、
> メニューのフォントとフォントサイズ
CMFCMenuBar::SetMenuFont
> ボタンの表示非表示
CMFCToolBar::EnableCustomizeButton

155:デフォルトの名無しさん
18/02/09 22:24:50.30 n0NVuMox.net
ありがとうございます!試してみます。

156:デフォルトの名無しさん
18/02/10 15:55:33.49 AljsEXlF.net
あれ?
CListViewなくなったん?
ウイザードにないw

157:デフォルトの名無しさん
18/02/10 19:51:23.23 kahd5R/F.net
SDIかMDIを選んでいれば、ウイザードの最後の項目でViewを選択できるはずです。選ぶ中にCListViewは有るはずです。

158:デフォルトの名無しさん
18/02/10 20:30:44.41 9BceoeeN.net
ないんだなーこれが

159:デフォルトの名無しさん
18/02/10 23:11:10.45 tnD/bf0m.net
そんなわけ無いだろうと思ったけど、無いね..
CListViewは存在するけどウィザードでは選択できなくなったのか
結構便利なクラスだと思うんだけどな

160:デフォルトの名無しさん
18/02/10 23:55:46.38 9BceoeeN.net
だろー
昨日から三回も再インストールしてる

161:デフォルトの名無しさん
18/02/11 00:27:35.71 Abk6WT5B.net
確かに2017communityでは、無くなっています。2013Communityには有るようです。

162:デフォルトの名無しさん
18/02/11 14:12:45.40 TT4/yggk.net
一応、MSに連絡

163:デフォルトの名無しさん
18/02/11 17:09:15.62 NeODdjx3.net
まぁこのへんの仕組みはもう変わらないだろうし、
適当なものを選んでから書き直しても問題ないけどな。

164:デフォルトの名無しさん
18/02/12 00:23:21.23 gJKrDJtj.net
TreeViewぐらいで

165:デフォルトの名無しさん
18/02/16 06:26:23.85 W1XJdyx1.net
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

166:デフォルトの名無しさん
18/02/17 09:44:17.48 skmHixeO.net
ウィザードのCListViewの話
去年にはもうあった話題やん
もうちょっと頑張ってくれよ
URLリンク(developercommunity.visualstudio.com)

167:デフォルトの名無しさん
18/02/28 17:21:10.04 C00JEheo.net
>>153
> >>152
> MFC Feature Packのメニューやツールバーのことなら、
>
> > メニューのフォントとフォントサイズ
> CMFCMenuBar::SetMenuFont
>
> > ボタンの表示非表示
> CMFCToolBar::EnableCustomizeButton
使い方がよくわかりません。適当なパラメーターがよくわからず、CMainframe内で呼び出してはみた物の、うまくフォントのサイズは変わりません。
ボタンの追加も消せませんでした。

168:デフォルトの名無しさん
18/02/28 18:28:27.62 8m4UvZqy.net
ソースが付いてるんだから読みなよ

169:デフォルトの名無しさん
18/03/01 12:14:56.76 AHCBMzq/.net
>>166
とりあえずこんな感じで書けば変わる。
ただ、あまり大きくすると、縦にドッキングしたときに文字が欠ける。
最新バージョンなら直っているのかもしれないけど、
自分のアプリではメニューは上部固定なので、深くは調べていない。
> メニューのフォントとフォントサイズ
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(metrics);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0);
LOGFONT lfMenu = metrics.lfMenuFont;
_tcscpy_s(lfMenu.lfFaceName, _T("MS P明朝"));
lfMenu.lfHeight = -24;
CMFCMenuBar::SetMenuFont(&lfMenu);
lfMenu.lfOrientation = 900;
lfMenu.lfEscapement = 2700;
CMFCMenuBar::SetMenuFont(&lfMenu, FALSE);
> ボタンの表示非表示
m_wndToolBar.EnableCustomizeButton(TRUE, -1, _T(""), FALSE);
もしくは、EnableCustomizeButtonを呼ばない。

170:デフォルトの名無しさん
18/03/01 13:10:39.24 txqdSq4Q.net
軽く煽ると答えを書いてくれるこのスレはチョロいよねw

171:デフォルトの名無しさん
18/03/01 18:59:24.33 5P8YUW6k.net
自演じゃなければ

172:デフォルトの名無しさん
18/03/01 21:28:45.70 qsUh1R3q.net
質問に答えると負けなんだろうか。
他のスレでも、質問に「答えない」ってだけのしょうもないマウントとりにくる人を見かけるね。

173:デフォルトの名無しさん
18/03/01 22:57:24.75 txqdSq4Q.net
>>171
君が質問に答えてあげればいいじゃん

174:デフォルトの名無しさん
18/03/04 03:39:37.81 dAX9rxSb.net
>>168
ありがとうございます。メニューのフォントサイズを変更でき、ボタンの追加・削除を消せました。
私ではとても考え付かない設定です。ありがとう!!

175:デフォルトの名無しさん
18/03/22 07:47:15.16 QjvVr0xE.net
温度情報などをグラフにしてFormView上に描画できないか考え込んでいます。自前でCDCに描いていくのではなく、描くのに適しているmfcのライブラリは無いものか、探しています。どなたか目盛りのついたグラフ描画に良いクラスはご存じないでしょうか?

176:デフォルトの名無しさん
18/03/22 10:15:31.03 Q2/ylW7b.net
matlab

177:デフォルトの名無しさん
18/03/22 12:52:08.54 nhBJfAJ/.net
>>174
MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
URLリンク(www.bcgsoft.com)
URLリンク(www.codejock.com)
無料ならこのへんのソースを読んでみるとか
URLリンク(www.codeproject.com)

178:デフォルトの名無しさん
18/03/22 18:20:31.23 gaCTtyVy.net
matlabはおそらく有料ライセンスですよね。

179:デフォルトの名無しさん
18/03/22 18:22:47.87 gaCTtyVy.net
>>176
> >>174
> MFC用の有料ライブラリならこのへんがあるけど、使い勝手は知らない
> URLリンク(www.bcgsoft.com)
>
グラフとして、このようなグラフが描けると良いなとは思います。 URLリンク(www.codejock.com)
>
> 無料ならこのへんのソースを読んでみるとか
> URLリンク(www.codeproject.com)
ちょっと調べてみます。ありがとうございます。

180:デフォルトの名無しさん
18/03/22 18:25:07.36 gaCTtyVy.net
昔の話で何ですが、DOSの時代にはMSCなどにグラフ描画ライブラリが付いてきていたような記憶があります。mfcには無さそうですよね。

181:デフォルトの名無しさん
18/03/22 19:42:36.73 lw2+9AAf.net
>>179
最新版は知らないが、昔のMFCには無かったと思う。
(昔の) MSDN Library をよく見ているが、発見してない。
でも、グラフ描画って、LineTo() だけでも大体いけると思うんだけど。

182:デフォルトの名無しさん
18/03/23 11:19:28.52 WP/XswCx.net
OLE2使ってExcel呼べばいいんじゃね?
MFC関係ないのでスレチだけど

183:デフォルトの名無しさん
18/03/23 12:29:30.45 S2qLyUZS.net
>>180
MSC = Microsoft CというDOS用のコンパイラです。1990年代のお話です。

184:デフォルトの名無しさん
18/03/23 13:06:50.13 5/36eG7n.net
>>182
知ってるけど

185:デフォルトの名無しさん
18/03/23 18:21:05.39 GtydX90K.net
>>174 >>177
matplotlib の python 用 dll を c/c++ から使う手がある

186:デフォルトの名無しさん
18/03/24 13:11:04.87 1MnVHuF+.net
.NETのChartコントロールをユーザーコントロールに置いてMFCダイアログでホストってのをやったことあるよ。
MFCビューでのやり方もMSDNに書いてあるからその通りやればできると思う。
MFC、Windowsフォーム、辺りで検索すれば見つかるはず。

187:デフォルトの名無しさん
18/03/24 13:59:14.06 5hh+Vua5.net
.NET使いたくないって話では

188:デフォルトの名無しさん
18/03/25 01:41:05.54 AJM/AyB8.net
.netはちょっと重いです。それでも参考になります。ありがとうございます。。

189:デフォルトの名無しさん
18/04/03 23:45:10.59 aZg1mfkw.net
mfcとexcelの連携が全然分かんない……COM?何それ?みたいな
msdnとかstackoverflowとかいろいろ漁ってもだめ。っていうかそもそもmfc、windowsってよくわかんないクラスとか変数とか多すぎじゃない
もっと簡単にプログラミングさせてよ!って思う

190:片山博文MZ
18/04/03 23:46:23.75 GFbsNNGI.net
>>188
VB6でも使ってろ

191:デフォルトの名無しさん
18/04/04 02:52:52.55 h2UR4/YM.net
>>188
馬鹿には無理

192:デフォルトの名無しさん
18/04/04 23:16:43.35 EgkZfqJG.net
昔、MFCに慣れてきた頃、趣味でMACのプログラミング勉強しようとして挫折したことがある。
Excel連携なら、その箇所だけでもVBでやるのがお勧め。

193:片山博文MZ
18/04/05 15:58:24.24 7o7fJyTF.net
URLリンク(blog.systemjp.net)

194:デフォルトの名無しさん
18/04/06 12:26:46.99 sTfZcU1Y.net
MFC使わなくてもCで良いのに

195:片山博文MZ
18/04/06 16:14:35.30 eB6IhESG.net
まずは、OleViewを起動してな。

196:デフォルトの名無しさん
18/04/20 12:34:59.85 r2H2v4t5.net
折れ線グラフをMovetoとLinetoで描くことにしました。線分を引くに当たって、GDI+とGDIでの描画速度を検証してみました。
32bit win7 corei5で24×1,024本の線分を描きましたところ
GDI+ drawLine 7300ms
GDI Moveto Lineto 350ms
という結果になりました。
mfcのMoveto Linetoは速いですよね。画面のサイズによって速度はだいぶ変わるようです。

197:デフォルトの名無しさん
18/04/20 12:38:07.74 r2H2v4t5.net
c#などのASP.net環境では、グラフを生成するAPIが有るようですね。サーバ上で簡単にグラフを生成し、クライアントのブラウザから見られます。

198:デフォルトの名無しさん
18/04/20 22:27:08.54 yO6TKb25.net
>>195
検証おつ。少数派かもしれませんがこういうの好きです。

199:デフォルトの名無しさん
18/04/25 12:53:36.78 4obztnoR.net
CFormView内でOnMouseWheelを使っていたのですが、コンボボックスを配置したところ、OnMouseWheelのイベントに飛んでこなくなりました。
今のところ、コンボボックスを継承して、コンボボックス内のOnMouseWheelイベント内で、親クラスへSendMessage(WM_MOUSEWHEEL )する事で動かせるようにしました。
この先、ほかのコントロールが追加されたら、またOnMouseWheelイベントを拾えなくなると思い、もっと良い方法があればと思っています。どなたか良い解決策をご存じですか?

200:デフォルトの名無しさん
18/04/25 13:44:01.27 jrjO5Mdd.net
>>198
CFormView派生クラスのPreTranslateMessage()で横取りしてしまうのが簡単かと

201:デフォルトの名無しさん
18/04/26 22:30:35.34 tB5nNnhP.net
確かに横取りで解決できました。ありがとうございます。
コンボボックスをドロップダウンリストに設定した場合のフォーカスについても伺いたいのですが、
CFormViewクラス内にドロップダウンリスト型のコンボボックスを配置すると、キーボードのフォーカスがコンボボックスに設定されてしまいます。
CFormViewに対してSetFocus()を呼び出しても、フォーカスがコンボボックスから外れません。
コンボボックスが青く塗りつぶされて選択状態になっているのを解除する方法をご存知ないですか?

202:デフォルトの名無しさん
18/04/27 09:24:02.21 V1X+E9CJ.net
>>200
CFormViewのソースを見るとわかるけど、SetFocus()を呼んでも、
OnSetFocus()の中で最後の位置に復元される。
その動きを別なものにしたいのなら、
OnSetFocus()をオーバーライドして、なにかしらの対応が必要かと。
なにもしないようにしてフォーム自身がフォーカスを持ってしまうとか、
サイズ0のダミーのボタンでも置いておいて、毎回そこにフォーカスを移すとか。

203:デフォルトの名無しさん
18/04/27 20:15:49.15 Q5E/Se8d.net
ありがとうございます!

204:デフォルトの名無しさん
18/04/27 20:26:32.52 Q5E/Se8d.net
ダブルバッファリングについて質問しても良いですか?
ピクチャーコントロールのダブルバッファリングを行いたいと思っているのですが、画面のサイズを大小いじられ続けると、GDIリソースを食いつぶして、アプリケーションが落ちます。
色々試して、画面サイズ変更イベント内のCreateCompatibleBitmapのところで確保したGDIリソースが DeleteObject();されるときに、GDIリソースを一つ多く確保し続けるようです。
CBitmap test;
test.CreateCompatibleBitmap(ピクチャーコントロールのdc,-,-); //GDIリソースが+2される
test.DeleteObject(); //GDIリソースがー1される
差し引きGDIリソースの確保量が+1になります。
そのうち線を書けなくなり、アプリケーションがクラッシュします。
使い方がどこか良くないのだと思うのですが、パラメータ等が良くないのかな。などと考え込んでいます。解決策をご存知ないですか?GDIリソースの確保量はタスクマネージャの設定でGDIリソースを表示できるようにして確認しています。

205:デフォルトの名無しさん
18/04/27 21:30:38.89 V9eZGmhL.net
CreateCompatibleBitmapの前後5行ぐらいに原因がありそうな気がする

206:デフォルトの名無しさん
18/04/28 06:46:29.77 7taUW+bg.net
>>203
自分で開放しないといけないのを忘れてるだけじゃないかな

207:デフォルトの名無しさん
18/04/28 13:43:55.18 RCDKOgRU.net
リソースの解放はDeleteObject();ではないのですか?
CreateCompatibleBitmapの前は、CreateCompatibleDCを呼び出しています。
CreateCompatibleDCのDCパラメータをNULLに設定すると、GDIリソースの浪費は無くなりますが、今度は出てくる画面が白黒になってしまいます。

208:デフォルトの名無しさん
18/04/28 15:02:19.62 7HtEIURB.net
>>206
ピクチャーコントロールのDCをGetDC()で取得してしてるのでは

209:デフォルトの名無しさん
18/04/28 15:36:31.72 K6dn8QZh.net
スタック上でCBitmap test;とやった場合
関数を抜けるときに勝手にデストラクタでDeleteObjectされると思う。
もう少しコード晒さないと判らない。

210:デフォルトの名無しさん
18/04/28 20:43:45.95 RCDKOgRU.net
CreateCompatibleDCでは、ピクチャーコントロールのDCを取得させています。
ピクチャーコントロールのDCを渡すと、CreateCompatibleBitmap時にGDIリソースを消費する量が2となるようです。
CreateCompatibleDCにNULLを指定した場合(確か)CreateCompatibleBitmap時のGDIリソース消費量ばかり1となります(以後の描画は白黒になります)。
今しばらく書いているコードをみられません。
CreateCompatibleDCやCreateCompatibleBitmapをOnSize時に破棄させてはサイズを変えて再生成させると、GDIリソースが消費されて減っていくので、
アプリケーション生成時に画面の最大サイズでCreateCompatibleDCさせておき、あとはCreateCompatibleDCしないように変更することも考えております。
アプリケーション生成時に画面のサイズ分のCreateCompatibleDCさせるようにすると、マルチモニタ環境の時などの動作が正常に動作しないかもしれないと思い、
可能ならOnSize内でDeleteObject();させてCreateCompatibleDCさせたいと思っています。
なお、OnSizeから抜けてもGDIリソース消費量は下がってくれないようです。

211:デフォルトの名無しさん
18/04/28 21:09:49.29 K6dn8QZh.net
207が言っているのは
bitmap.CreateCompatibleBitmap(pict->GetDC(), rc.Width(), rc.Height())
してるんじゃないかって事。これだとリークします。

212:デフォルトの名無しさん
18/04/29 02:54:49.07 4Tl9MZgN.net
ReleaseDC

213:デフォルトの名無しさん
18/04/29 22:23:44.07 dUB73wKv.net
>>212
> 207が言っているのは
> bitmap.CreateCompatibleBitmap(pict->GetDC(), rc.Width(), rc.Height())
> してるんじゃないかって事。これだとリークします。
しています。その上でどのように直すべきか察しが付きません。やはりReleaseDCで直りますか?

214:デフォルトの名無しさん
18/04/29 23:00:49.09 azFTonkH.net
ReleaseDCで直る。
私なら 解放不要なCDC::FromHaqndleを使う。

215:デフォルトの名無しさん
18/04/30 09:00:09.82 N15MwktU.net
>>212
CClientDCを使うのが一番簡単だけど、
CreateCompatibleDC()のほうは引数はなにを渡しているんだ?
>>213
CDC::FromHandle()はHDCがわかっているときに使うもので、
今回のDCを取得すること自体には使えない。

216:213
18/04/30 13:12:38.67 3QBGre+r.net
スマソ勘違いだった

217:デフォルトの名無しさん
18/04/30 14:30:59.80 s7QfKdrQ.net
>>216
CompatibleDCの引数はピクチャーコントロール内のDC
memDC.CreateCompatibleDC(ピクチャーコントロール.GetDC(),ピクチャーコントロールのx,y);
だったと思います。
GetDC()でピクチャーコントロールのDCを取得していたか、GetSafeDCでピクチャーコントロールのDCを取得していたかちょっと思い出せません。

218:デフォルトの名無しさん
18/04/30 14:32:37.77 s7QfKdrQ.net
CreateCompatibleDCのパラメータはDC一つだけでしたね。ごめんなさい。

219:片山博文MZ
18/04/30 14:34:44.36 4AJ8oS6Z.net
GetDCの返り血はReleaseDCしないといけない。

220:デフォルトの名無しさん
18/04/30 19:49:57.15 fTg4MTz+.net
返り血こわ

221:デフォルトの名無しさん
18/05/01 13:59:06.30 eD8/BCAz.net
ReleaseDCではGDIリソースがー1になりますが、createCompatibleBitmapで+2消費したぶんのすべては解放されてくれません。
releaseDCはおこなっていますが、GDIリソースの消費量は依然として+1になってしまいます。

222:片山博文MZ
18/05/01 14:20:07.77 ARev1vvH.net
>>220
ソースきぼお

223:デフォルトの名無しさん
18/05/07 12:52:31.69 axInvDCA.net
原因わかりました。
memBmp.CreateCompatibleBitmap(picctrl.GetDC(),x,y);
が良くなかったようです。
GetDC()でGDIリソースを1消費し、解放出来なくなります。
CDC *pDC;
pDC->picctrl.GetDC();
memBmp.CreateCompatibleBitmap(pDC,x,y);
DeleteObject(memBmp);
ReleaseDC(pDC);
に直したところ、ちゃんとGdIリソースが戻りました。

224:デフォルトの名無しさん
18/05/07 12:55:07.54 axInvDCA.net
pDC=picctrl.GetDC();
に修正します。
解答いただいた方々、ありがとうございます。

225:デフォルトの名無しさん
18/05/07 14:56:30.49 QMgv+0U5.net
>>222-223
最初からみんなそう言ってたのに

226:デフォルトの名無しさん
18/05/08 19:14:19.80 c2nzYwoQ.net
> CDC *pDC;
> pDC=picctrl.GetDC();
> ReleaseDC(pDC);
picctrl.GetDC()したものを親がReleaseDC()しているのが気持ち悪いが、
これでも正しく動くのか?

227:デフォルトの名無しさん
18/05/11 20:03:19.69 AvqrI8lf.net
GetDC()したらReleaseDC()する必要があるのだと思う。CDC*はデストラクタ処理に入れないからReleaseDCする必要がある。
VC++.net CLRとかなら自動でやってくれるのだろう。

228:デフォルトの名無しさん
18/05/12 17:30:06.38 r7l6NWuz.net
>>226
picctrl.ReleaseDC(pDC);
とするべきではということなんだが。
そもそもCClientDCを使えばGetDC()なんて自分で呼ぶ必要はないが。

229:デフォルトの名無しさん
18/05/14 21:41:18.68 8B23ox7k.net
そうなんだ。φ(`д´)メモメモ...

230:デフォルトの名無しさん
18/05/23 19:28:52.23 Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
HQL0Y

231:デフォルトの名無しさん
18/05/24 10:17:50.97 0MNYvz/l.net
バイナリデータ(buf)を受け取ってピクチャーコントロール(m_picture)に
描画したいのですがBitBltのところで
"Debug Assertion Failed!"
が発生してしまいます。
何が悪いのか教えていただけないでしょうか?
PAINTSTRUCT ps;
CBitmap bitmap;
CImage image;
CDC *pDC;
pDC = m_picture.BeginPaint(&ps);
pDC->SetBkMode(TRANSPARENT);
pDC->SetStretchBltMode(COLORONCOLOR);
bitmap.CreateBitmap(width, height, 1, 8, (void*)&buf);
HBITMAP hBitmap = HBITMAP(bitmap.GetSafeHandle());
image.Attach(hBitmap);
image.BitBlt(pDC->GetSafeHdc(), CRect(0, 0, image.GetWidth(), image.GetHeight()), CPoint(0, 0));
image.Detach();
image.ReleaseDC();
m_picture.EndPaint(&ps);

232:デフォルトの名無しさん
18/05/24 10:22:02.55 fftgGS82.net


233:放置された蟻人間
18/05/24 19:30:21.07 lMOj7i3d.net
ASSERT(IsWindow(m_picture)); してみれ。

234:デフォルトの名無しさん
18/05/25 08:35:43.69 0miZfrjS.net
>>232
連絡ありがとうございます。
やってみましたがプログラムが止まらないので問題ないみたいです。

235:デフォルトの名無しさん
18/05/25 11:28:17.31 XVxgp9wt.net
まず"Debug Assertion Failed!" が出ているのならちゃんと再試行を押そうよ。
それだけで原因そのものはわかる。

236:デフォルトの名無しさん
18/07/04 22:49:24.38 gFgZc5FG.net
EQ8

237:デフォルトの名無しさん
18/07/06 12:25:50.03 uTPDH9XV.net
EQ8

238:デフォルトの名無しさん
18/07/07 16:23:50.25 BnawPcHi.net
CListCtrでレポート表示のFullRowSelectをカスタムドローを弄ってます。
マウスがアイテムの上に来たら色を変えたいけど、カスタムドローのイベントハンドラだけできますか?
OnMouseMoveでどこにあるか判定してカスタムドローで描画が必要?

ビットマップを3番目のSubItemだけに貼るとか、16x16のSmallサイズ以外だとうまくいかないとか、癖が凄い。

239:デフォルトの名無しさん
18/07/23 18:19:00.33 +TIH++V2.net
tooltipの表示内容を一つのピクチャコントロール内で変更したいのですが、マウスカーソルが一端ピクチャコントロールから外れないと、ツールチップの内容が更新されないようです。onmousehoverなどを使わないと駄目でしょうか?

240:デフォルトの名無しさん
18/07/24 07:28:28.65 vj16B9du.net
tooltipの解決策を見つけました。
URLリンク(www.geocities.jp)

241:デフォルトの名無しさん
18/07/27 23:03:38.30 FVoX1kIB.net
Tooltipの件ありがとうございます。
おかげさまで何とか解決できました。

242:デフォルトの名無しさん
18/08/02 20:01:14.70 lFbk57E7.net
datを生成するMFCプログラムがありまして、そのdatからデータを読み込んでexcelの形式に合わせて出力するダイアログベースのMFCプログラムがあります
最初のプログラムから呼び出されて処理をするだけなので、ウインドウの表示とかしないです。ただただ処理して終わりです
それで問題なんですが通常のダイアログを使ったプログラムのように読み込み・変換処理を全部ダイアログ部分に書いてあるんです
ダイアログ使いもしないのにここに書くのおかしくないですか?と聞いたら表示されないんだしいいでしょと。画面表示を行わないMFCプログラムの場合、コードはどこに書くのが自然なんでしょうか?

243:デフォルトの名無しさん
18/08/03 10:09:25.61 SxfGFWQF.net
スレッドを別けたいという意味か?

244:デフォルトの名無しさん
18/08/03 18:35:46.47 uhu4d/dd.net
あーすいませんわかりにくかったですね
メインプログラムがあってその内部でdatを生成するんですよ
で、そのdatのパスをコマンドライン引数で別のプログラムに渡すんですね
スレッドというかそもそも2つのプログラムですわ

245:デフォルトの名無しさん
18/08/03 18:52:53.67 o/XiGXrO.net
MFC関係ないのにここで聞くのおかしくないですか?

246:デフォルトの名無しさん
18/08/03 19:53:47.89 82qJLwKQ.net
事情が見えない。
どーーしても別プログラムにする事情があると仮定すれば
DialogやConsoleで構わないと思う。
冗長さを排除したいなら_tWinMainから書く手もあるけど
体感できるような差は出ないかと。表示されないんだしいいでしょw

247:デフォルトの名無しさん
18/08/05 03:07:58.27 lHG7kQYc.net
>>241
>ダイアログ使いもしないのにここに書くのおかしくないですか?
じゃぁどこに書けばいいの?

248:デフォルトの名無しさん
18/08/05 10:12:06.95 D9xcyyWx.net
>>241
MFCの仕組みを使いつつ、まったくウィンドウ表示が不要なものなら、
アプリケーションクラスのInitInstance()の中で処理して、
FALSEを返してすぐ終了するという流れでよいのでは。

249:デフォルトの名無しさん
18/08/06 22:59:00.43 OCzRfTP8.net
>>247
結局それにしました。
あとは処理を分担するふっつーのC++クラスいくつか作ってダイアログは完全に使わない感じで

250:デフォルトの名無しさん
18/08/07 05:06:10.31 OlmXtX1U.net
サマータイムも意味がないがそれ以上に意味がない

251:デフォルトの名無しさん
18/08/14 16:45:48.75 /E7izJ6Y.net
横から失礼します
InitInstanceの場合は標準出力にメッセージを出せますか?
標準出力に出すmfcプログラムだとすると、_twinmainを使うとどうでしょう。

252:デフォルトの名無しさん
18/08/14 19:27:19.22 iucfbso2.net
どちらもやったことありませんが可能だと思います。
私なら _tmain 使うとおもいますが。

253:155
18/08/15 09:28:56.94 IMvh29W2.net
CListViewがウィザードに帰ってきた!!
やほーい

254:デフォルトの名無しさん
18/09/20 15:00:47.62 i16QdaBT.net
MFCというかプログラミング姿勢に関しての質問かもしれないんですけど
CやC++で標準的に実装されてる機能とMFCクラスで実装されてる機能、どちらを使っても
同じことが実現できる場合、どちらを優先して使っていくべきなんでしょうか
要するに文字列ならchar*かstringかCStringか
ファイル操作ならfopenかstreamかCfileかみたいな

255:デフォルトの名無しさん
18/09/20 16:28:00.36 +UNWjTgc.net
MFCはオワコン
C#
使え

256:デフォルトの名無しさん
18/09/20 18:01:52.92 TMKaX7fO.net
>>254
そうでもない。
>>253
文字列は、単に文字列を保持したい場合や、文字列連結を行いたいような場合は、CStringが便利だと思う。
パーサーなんかを自作する時は、char *が便利。

257:デフォルトの名無しさん
18/09/20 18:03:18.25 TMKaX7fO.net
>>253
ファイル操作は、経験上は、fopen()が便利かな。
CFileは意外と不便だった気がする。

stringは、敢えて使う必要は無いと思う。CStringで十分。

258:デフォルトの名無しさん
18/09/20 18:03:55.46 a/ASjwi8.net
俺はできるだけ標準のほうを使うように切り替えた

259:デフォルトの名無しさん
18/09/20 22:16:17.61 P1fXZpxD.net
機能が同等なら好みでいいと思うけど、ファイル操作みたいにOS依存が強い機能は
標準ライブラリじゃ足りない場合が多いかな。

260:デフォルトの名無しさん
18/09/21 00:47:14.84 fuc3wJjq.net
MFCのGUI特化した本ないのかねー
大概が初心者向けでポインタやら構造体やらMFCと関係ないことが大半を占めてて知りたいことはうすーくしか書いてないのばっか

261:デフォルトの名無しさん
18/09/21 06:34:48.10 l8rNCGoZ.net
>>259
20年も前の本だが、お奨めは
URLリンク(calil.jp)

262:デフォルトの名無しさん
18/09/21 08:13:00.69 US5K8oGJ.net
>>260
ありがと
1万くらいなら買うんだけどなぁ

263:デフォルトの名無しさん
18/09/21 11:19:39.33 Nv8vO9db.net
本でなくて申し訳ないけど
ヘルプ。
クラスも大幅に拡張されてしまい昔の良書だとツリービュー、リストビュー位まで
最近のリッチな所はヘルプからサンプルソースにたどるのが早いかと

264:デフォルトの名無しさん
18/09/21 13:21:21.50 9xBQcUDg.net
Windows本体ってMFCで作ってるの?

265:デフォルトの名無しさん
18/09/21 17:59:38.20 /FmUXr1R.net
カーネルという意味では、ないやろな。性能面の要求はそんなに甘くないよ。
周辺の付加的モジュールでは、ATLとかは使ってるかも

266:デフォルトの名無しさん
18/09/21 19:07:45.12 M0K6QlhH.net
Windows7のペイントとかワードパッドとかをSpy++で見ると、
Afx~の付くウィンドウクラス名が使われてるから、
このあたりはまだMFCで作られてたんじゃないだろうか。

267:デフォルトの名無しさん
18/09/21 22:10:32.71 Yrc2SKMF.net
なるほど

268:デフォルトの名無しさん
18/09/22 09:01:41.72 f3qG2b9t.net
「コンピューターの管理」なんかも、AfxWnd42やAfxFrameOrView42uが出てくる。

269:デフォルトの名無しさん
18/09/22 12:43:01.39 xOVRbYWf.net
>>261
>>259
うちにあるよ

270:デフォルトの名無しさん
18/09/22 12:44:10.56 xOVRbYWf.net
>>263
あやしいよな

271:デフォルトの名無しさん
18/10/02 12:20:10.07 T1hsru+o.net
VC++6.0で作っています。 MFCです。
普通にSDIを作りますが、そこからメニューバー等からダイアログボックスをモードレスで起動します。
すると、ダイアログを起動しながらメインウインドウも触れるようになるのですが、そのフォーカスを
モードレスダイアログとメインウインドウとをマウスを使わずにキーボードで切り替えることって出来ませんか
MSのWindowsOSのAlt+Tabではこれらはひとつとして認識されているようでこれでは切り替えられません
ちなみに、Windows7です

272:デフォルトの名無しさん
18/10/02 12:45:27.08 +xKncks4.net
モードレスなら出来るやろ

273:デフォルトの名無しさん
18/10/02 14:53:03.01 T1hsru+o.net
>>271
メインウインドウからモードレスダイアログを起動するのですが、すると、Alt+Tabではこれらはひとつとして
認識されますよ

274:デフォルトの名無しさん
18/10/02 15:13:04.28 yDKwoLm6.net
Ctrl+TAB

275:デフォルトの名無しさん
18/10/02 15:45:33.11 T1hsru+o.net
>>273
Ctrl+TABでは、ダイアログ上のコントロールのフォーカスが変わっていきます
ウインドウの切り替えはできません

276:デフォルトの名無しさん
18/10/02 15:50:20.77 yDKwoLm6.net
Ctrl+Alt+TAB

277:デフォルトの名無しさん
18/10/02 16:01:18.57 T1hsru+o.net
>>275
やってみましたが、Alt+Tabでアプリを変えていけますが、そこに出てくるアプリの数が減っているのを
除いて、同じ動作です。 アプリが変わります

278:デフォルトの名無しさん
18/10/02 16:28:36.02 7CL4bG8Y.net
モードレスの親がメインウィンドウなら切り替えできず、親がない(デスクトップ)なら切り替えできるのでは。
親がメインウィンドウの場合でも、PreTranslateMessageでTABキーを補足してSetForegroundWindowとかすればいいと思う

279:デフォルトの名無しさん
18/10/02 16:35:36.67 T1hsru+o.net
デフォルトでは用意されていないのかな
PreTranslateMessageを使えばなんでもできますが、
メインウインドウとダイアログと両方に書かないといけないからなあ。しょうがないのかな

280:デフォルトの名無しさん
18/10/02 16:38:35.01 T1hsru+o.net
PreTranslateMessageで書きますか。 キーは何をあてるのが自然でしょうか
Ctrl+Tabあたりかな
タブコントロールは、Tab だけと Shift+Tabで動きますからね

281:デフォルトの名無しさん
18/10/02 21:23:19.58 R8M7QKDK.net
vista、vs.net2003 vc++の組み合わせだが
ALT+TABでアプリがきりかわりながら
ふつうにSDIとモードレスのダイアログでトグルする

282:デフォルトの名無しさん
18/10/02 21:49:14.12 T1hsru+o.net
>>280
わざわざありがとう。私と環境がちがうからなのかな
PreTranslateMessageを利用して、Ctrl+Tabでプログラムを作りました。これでうまく行きました

283:デフォルトの名無しさん
18/10/07 14:30:22.57 stJt0pET.net
>>281
ダイアログをCreateする時、親ウィンドウ(省略時=NULL)を指定していないから、
アプリケーションのメインウィンドウ(=AfxGetMainWnd())が、親ウィンドウが
になっているからでは?
CDialog::Create(CWnd::GetDesktopWindow())
とかでいけるはず。 MFCとは関係なく、Windows APIでは、所有ウィンドウ
(Owner Window)と、親ウィンドウ(Parent Window)は別管理。

284:デフォルトの名無しさん
18/10/15 20:08:17.72 xZyzsY81.net
MSDN見ても解決しないのでお願いします。
CMFCColorDialogで作成した色選択ダイアログの動きが少しおかしいです。
どれかの色(六角形)を選択すると[OK]ボタンのフォーカスが当たり、再度
別の色を選択するとフォーカスが外れるんですが、仕様でしょうか??

285:デフォルトの名無しさん
18/10/15 20:10:37.85 xZyzsY81.net
.DoModal()を使っています。

286:デフォルトの名無しさん
18/10/16 10:55:52.13 gOw5Bgha.net
>>284
VS2008のNewControlsサンプルではそういう動作は見られないけど、
再現できるサンプルでもありますか?

287:デフォルトの名無しさん
18/10/16 20:59:43.03 KuFMVrck.net
>>285
わざわざ試していただいてありがとうござます!
こちらの環境、Windows10、VisualStudio2017なのでこれが原因っぽいです。
古いVisualStudioで試してみます。
業務アプリなのでサンプルは出しにくいです。申し訳ないです。

288:281
18/11/03 20:11:07.69 FHfXrfBW.net
>>282
おお、今頃ですが、ありがとうございました
これでAlt+Tabでもモードレスウインドウが出てくるようになりました !

289:デフォルトの名無しさん
18/11/03 20:17:24.87 FHfXrfBW.net
今まで、VC++6.0でずっとやってきました。特にそれで問題なかったからですが、意を決して、
Visual Studio 2017をインストして、古いソースコードを移植しようと思っています
VS2017に古いVC++6.0のdswファイルを読ませたのですが、うまくj変換できないようですが、どうしたら良いでしょうか
VC++6.0からの変換は出来ませんか

290:さまよえる蟻人間
18/11/03 20:20:22.32 Z2+VfrEc.net
ワークスペースはソリューションに変わった。新しくソリューションファイルを作って、そこにC/C++のファイルを追加してビルドだ。

291:デフォルトの名無しさん
18/11/03 20:48:27.94 FHfXrfBW.net
インクルードファイルとかいろいろエラーがたくさん出てきたよ
これ相当無理っぽい???

292:さまよえる蟻人間
18/11/03 20:50:34.93 Z2+VfrEc.net
>>290
エラー貼れ

293:デフォルトの名無しさん
18/11/03 21:08:57.06 FHfXrfBW.net
取りあえず、簡単に比較するために、VC++6.0でMFCのSDIのデフォルトを作りました
それと比較するため、VS2017でC++のWindowsデスクトップのデスクトップアプリケーションのデフォルトを作りました
すると、VS2017の方はMFC自身を使わないバージョンなのかな、CMainFrmとかIMPLEMENT_DYNCREATEとかなくて
VC6.0++のMainFrm.cppとかを2017の方に持ってきてコンパイルしたらCMainFrmが定義されてないとか
ずらっとたくさん出てきます

294:さまよえる蟻人間
18/11/03 21:11:31.59 Z2+VfrEc.net
MFCに対応したプロジェクト/ソリューション設定じゃないとダメかも

295:デフォルトの名無しさん
18/11/03 21:15:37.09 FHfXrfBW.net
>>293
VS2017で、それを探してるのですが見つからないのですよ
MFCには対応してるのですよね。2015かそれ以前にはすでに対応してると聞いていたのですが
MFCを使ったデフォルトのコード生成はしてくれないとか??? w

296:さまよえる蟻人間
18/11/03 21:19:34.89 uOx37ouV.net
Visual C++の中にMFCがある。Visual C++という項目がなければ、インストールが間違っている。

297:デフォルトの名無しさん
18/11/03 21:23:19.86 FHfXrfBW.net
>>295
メニューのファイルから新規作成、プロジェクトを選ぶと、その中にVisual C++はちゃんとありますよ
で、そこでWindowsデスクトップアプリケーションを選んでデフォルトを作ると、コードはSDKみたいなコードを吐きます
で、Windowsデスクトップウィザードってのがあったので、今これを選択してみたのですが、
アプリケーションの種類をコンソールにすると、その右にあるMFCのチェックボックスが有効になるのですが

298:デフォルトの名無しさん
18/11/03 21:24:15.77 FHfXrfBW.net
続き
Windowsアプリケーションってのを選ぶと、MFCのチェックボックスが使用不可になってしまいます

299:さまよえる蟻人間
18/11/03 21:27:13.99 uOx37ouV.net
MFCアプリが作れないなら、インストールで追加するしかないぜ。

300:さまよえる蟻人間
18/11/03 21:29:11.91 uOx37ouV.net
URLリンク(twitter.com)
(deleted an unsolicited ad)

301:デフォルトの名無しさん
18/11/03 21:29:36.23 FHfXrfBW.net
おいおい、なんだこれ
VS2017で、新規作成、プロジェクトで、Windowsデスクトップウィザードで
コンソールアプリケーションでMFCをチェックしてデフォルトのコードを自動生成してみました
そしてソリューションのビルドしたら、CWinAppが定義されてないとかエラーがわんさか出てきたぞ
おいおい、デフォルトの自動生成コードもビルド出来ないじゃん

302:さまよえる蟻人間
18/11/03 21:30:32.78 uOx37ouV.net
左下、「探しているものが見つからないとき」

303:デフォルトの名無しさん
18/11/03 21:33:48.34 FHfXrfBW.net
>>299
おや、そこが違う。 私のは、
visual C++の下に
Windowsデスクトップ
クロスプラットフォーム
MFC/ATL
テスト
その他
Extensibility
ってなってて、 MFC/ATLのところは
ATLプロジェクト
ってのだけがあります

304:デフォルトの名無しさん
18/11/03 21:37:10.59 FHfXrfBW.net
何かインストを失敗してるのかなあ。 あるいはインストするときに何をインストするのかチェックがあったんだが
それを間違えてるのか。 でも俺がチェックをしなかったのはモバイル関係のところくらいだったんだよねえ

305:さまよえる蟻人間
18/11/03 21:38:58.82 uOx37ouV.net
URLリンク(qiita.com)

306:さまよえる蟻人間
18/11/03 21:40:59.04 uOx37ouV.net
VS2017は頻繁に変更されるもんだから、ちょっと混乱してるみたい。

307:デフォルトの名無しさん
18/11/03 21:48:14.06 FHfXrfBW.net
>>304
ありがとう。
右側の概要ってとこが、私のでは、インストールの詳細になっていて、
MFCとATLのサポート
ってのが私のでは、
x86用とx64用のVisualC++ATL
x86用とx64用のVisualC++MFC
ってわかれていて、ATLの方にだけデフォルトではチェックが入っていてMFCの方のチェックは
デフォルトでは外れていました。
チェックして再インストしてみますねw

308:さまよえる蟻人間
18/11/03 21:52:26.12 uOx37ouV.net
インストよりもインスコの方が俗語の通りがいい。

309:デフォルトの名無しさん
18/11/03 22:01:09.50 FHfXrfBW.net
ただいま、 再インスコ中です
みなさん、 VS2017をインスコするときは、
MFC はデフォルトでは入らない !!!
ことがわかりました
VS2017をインスコするときは、注意しましょう
インスコするとき、オプションをチェックすると入ります、 多分。今やってるところ

310:さまよえる蟻人間
18/11/03 22:07:33.60 uOx37ouV.net
Qiitaの記事、結構役に立ってるじゃん。責任ある情報技術者なら、Qiitaに記事を書ける程になってもらいたいね。

311:
18/11/03 22:11:49.30 NHF1sC9n.net
>>309
qitta って査読制ですか?

312:デフォルトの名無しさん
18/11/03 22:16:25.81 FHfXrfBW.net
出来ました。
MFCのインストがちゃんとできて、
MFCアプリケーションでデフォルトのMDI作ってみたら、 あら、すげえ
クラスビューなんかが出てくるのねw

313:さまよえる蟻人間
18/11/03 22:18:01.50 uOx37ouV.net
最低限の審査はあると思うぞ。
詳しくは規約を。

314:デフォルトの名無しさん
18/11/03 22:30:48.57 FHfXrfBW.net
おや、新しいバージョンだと、
strcpy( a, b )
で、b に CSringとか出来ないんだね。 前の古いバージョンでは出来たのに
CString で返す関数も、char a[10] とかで宣言したのを、古いバージョンでは、retuen a
って出来たんだが、新しいバージョンではエラーになる。 一旦
CString ret;
ret = a;
ってやって、return ret;
ってやったらエラーが消えた
いろいろと細かい修正しないとダメみたいだねえ

315:さまよえる蟻人間
18/11/03 22:35:23.28 uOx37ouV.net
暗黙の型キャストのあいまいさが嫌いな人が存在するらしい。

316:デフォルトの名無しさん
18/11/03 22:42:34.44 FHfXrfBW.net
>>314
いろいろとありがとう。 今日はとりあえずここまでにしておきます

317:デフォルトの名無しさん
18/11/04 14:43:10.46 5RY1Lh2I.net
>>313
きも

318:デフォルトの名無しさん
18/11/04 21:56:04.47 GQHsCvIR.net
>>313
URLリンク(gurigumi.s349.xrea.com)

319:デフォルトの名無しさん
18/11/05 10:05:31.23 iQgkSIfQ.net
>>317
これありがとう。LPCWSTRの関係で、めっちゃ詰まってました

320:デフォルトの名無しさん
18/11/05 10:35:49.97 cQLaagjN.net
>>313
そもそも、CStringはTCHARを扱うクラスなのに、
_tcscpyではなくstrcpyを使っていたのが間違い

321:デフォルトの名無しさん
18/11/05 12:07:09.35 iQgkSIfQ.net
>>319
今は、_tcscpyを使ってもエラーが出るけどな

322:デフォルトの名無しさん
18/11/05 12:15:02.40 mvX3Qu15.net
>>320
それはエラーではなくてセキュリティ上の警告では

323:デフォルトの名無しさん
18/11/05 12:20:01.12 iQgkSIfQ.net
>>321
そうです。 _sを付けたのを使えって
警告の設定を変更しないとエラーになってコンパイルが通りません
それをプロパティの設定で、Unicodeからマルチバイトに切り替えてコンパイルしたんだけど、どうも
Unicodeのままでうまく切り替わらないようなんですよねえ。 どうなってるのか。 今は時間がないので
またあとでやってみますが

324:デフォルトの名無しさん
18/11/05 12:26:42.35 mvX3Qu15.net
>>322
警告だから、それに関してはコンパイルは通る。
他の場所がコンパイルエラーになっているだけかと。

325:デフォルトの名無しさん
18/11/05 16:42:29.67 Lc5ZfJaA.net
VS2017ですが、新規作成で、MFCアプリケーションで作った時、
新規作成途中に出てくるSDLのチェックをつけて作成したときと、はずして作成したときと両方してみました
すると、SDLつきの時は、_tcscpyはエラーになってコンパイルできませんが、
SDLをはずして新規作成したのものは、エラーにならずにコンパイルできて実行できます
デフォルトはSDLつきなので、コンパイルできません
次に、新規作成して出来上がったプロジェクトで、
メニューのプロジェクトから一番下のプロパティに入って、構成プロパティ、C/C++の全般にある
SDLチェックというところで、はい(/sdl) いいえ(/sdl-)を切り替えてやってみると、
この切り替えが動作せず、SDLのオン、オフが効きません。 プロジェクトの新規作成のときに設定したものが
残っていて、あとからここのプロパティで変更ができないようです
同じように、プロパティの構成プロパティの全般で、文字セットがデフォルトではUnicode文字セットを使用する
になってるのですが、これをマルチバイト文字セットを使用するにしても
Unicodeのままでマルチバイトにならないようです
バグですかねえ?

326:デフォルトの名無しさん
18/11/05 17:14:38.42 o5QGnfIr.net
新規のプロジェクトにマルチバイト使うのやめようぜ

327:デフォルトの名無しさん
18/11/05 20:46:10.49 fgA77wSW.net
>>324
VisualStudioCommunity2017で試したが、普通に設定が反映されたぞ。
DebugとRelease、x86とx64で設定が別なのに気づいてないとかじゃないか?

328:デフォルトの名無しさん
18/11/05 21:22:43.21 Lc5ZfJaA.net
>>326
できました。多分それです。ありがとうございました
コードの編集画面の上にあるコンボボックスを見ると、Debugとx86になってるのですが、
その状態でプロパティを開くと、なぜか、x64になってました。
なのでプロパティ画面で、上にあるプラットフォームをアクティブ(Win32)に変えると、画面がおかしくなって
びっくりしましたが、画面の再描画ができなかっただけなようで、再びプロパティ画面を出して
アクティブ(Win32)を確認してから、マルチバイトやSDLの変更をしたら、ちゃんと動いたようです
プロパティ画面を開くときは、連動してないので必ず確認してから変更しないといけないということですね
ちなみになんとか誤魔化せないかと思って、 stdafx.h の最初に
#undef UNICODE
#undef_UNICODE
ってやってみたら、コンパイルまでは全部のcppファイルで出来たのですが、リンクで未解決エラーが出て
出来ませんでした

329:デフォルトの名無しさん
18/11/05 22:12:55.20 fgA77wSW.net
さすがにそれはおかしいのでVS2017再インストール推奨

330:デフォルトの名無しさん
18/11/05 22:23:54.08 Lc5ZfJaA.net
>>328
マジですか。 再インストしようかな

331:デフォルトの名無しさん
18/11/05 23:46:35.28 2AHpASAJ.net
_T() ?

332:デフォルトの名無しさん
18/11/06 11:56:33.16 rqFrnjhJ.net
>ちなみになんとか誤魔化せないかと思って

>リンクで未解決エラー
MessageBoxA と MessageBoxW とかを自分で書き分けてみると解決するはず

333:デフォルトの名無しさん
18/11/11 14:34:30.31 vUUak6BF.net
URLリンク(r2.upup.be)

334:デフォルトの名無しさん
18/11/11 17:52:29.57 96wp+TZd.net
しねNG

335:デフォルトの名無しさん
18/12/07 17:05:15.69 meFvbPH8.net
MFCのツールバーって、リバーのように、「ツールバーを固定する」の動作はできませんかね。
ユーザーがコマンドを選択したら、その場所から動かすことができなくなるようにしたいのですが。

336:デフォルトの名無しさん
18/12/08 16:28:45.38 S81QsiH/.net
subclass化してメッセージループトラップしてmoveをにぎりつぶす

337:デフォルトの名無しさん
18/12/17 19:07:24.59 Fq49NMNr.net
HWND hWnd はできるけど、
HDC hDC って、別アプリ(別プロセス)に渡して、書き込ませることは出来ないの?
HDC の識別番号が、プロセスごとに別の「名前空間」みたいなことになってるのかな。

338:デフォルトの名無しさん
18/12/17 19:18:47.70 Fq49NMNr.net
GDI objects support only one handle per object. Handles to GDI objects are private to a process.
That is, only the process that created the GDI object can use the object handle.
↑によれば、HDC は、プロセス・プライベートだって、書いてるけど、
たまたますごいことみつけちゃったんだ・・・実は。
みんな知ってる?

339:デフォルトの名無しさん
18/12/18 08:47:01.21 G1V4hdx+.net
実は、PrintWindow(HWND hWnd, HDC hDC, DWORD flag) API を使うと、HDC をプロセスの
垣根を越えて渡せるんだ。プロセスA からプロセス B に HDC を渡す場合、
プロセスA で、PrintWindow() API を呼び出す。hWnd にはプロセスBで作成した
Window の HWND を、hDC には、プロセスAに所属している HDC を渡す。
MFCを使って実験してみると、この場合、プロセスBの hWnd にWM_PRINT メッセージが
来るが、OnPrint() ハンドラが BeginPaint(), EndPaint() を使わずに、メッセージから受け取った
hDC を CDC *pDC に入れて、WM_PAINT の時と同じ OnDraw() を呼び出すらしい。
らしいと言ったのは、もしかしたら、MFCが途中で何らかの手を加えている可能性があるから。
で興味深いのは、この時の pDC->m_hDC の値は、プロセスA のオリジナルの値とは
数値的には異なっていると言うこと。
推定ではあるが、PrintWindow() API を使うと、Windows System が、プロセスA での hDC の
識別番号とは異なる識別番号を、WM_PRINT メッセージのの hDC に与える。
これは、>>337 で書いているとおり、HDC は、process private だから、プロセスごとに
「名前空間」が異なるため、プロセスの垣根を越えるときには、同じ値をそのまま使うことは
出来ないため。
でも、結局、「番号」が変わっているだけで、同じ Device Context を「指している」ので、
効率よく 描画動作を行える。
この API を使えば、プロセスA で用意した実DC や メモリーDC に、プロセスB の OnDraw()
によって直接書き込ませることが出来ることを確認済み。

340:デフォルトの名無しさん
18/12/18 08:56:36.56 G1V4hdx+.net
この話には続きがある。
Ubuntu Linux の Wine Emulator 3.2 で実験してみると、PrintWindow() が上手くいかないらしい。
なので、誰かに直して欲しい、と言うこと。
直してクレクレ。

341:デフォルトの名無しさん
18/12/18 11:55:37.33 /M0/bFGF.net
URLリンク(dqmacro.blog.fc2.com)
chromeで開くと正常だけど
ffで開くと死ぬな

342:デフォルトの名無しさん
18/12/20 16:21:01.93 IGyhJ3NX.net
>>338
さらに実験してみたところ、プロセスA から、プロセスB の HWND に対して、
PrintWindow() した場合、プロセス B には、WM_PRINT も WM_PRINTCLIENT
も送られることなく、WM_PAINT、WM_NCPAINT が送られる。
興味深いことに、MainFrame のような、OVERLAPPEDWINDOW には、
メッセージキューを介すことなく、WM_PAINT、WM_NCPAINT が送られるが、
EditBox などの CHILD WINDOW には、メッセージキューに WM_PAINT が
格納された後、EditBox の WndProc に WM_PAINT、WM_NCPAINT が送られる。
もっと実験してみたところ、普段、PrintWindow() を使うことなく、Winow のサイズ
変更などをして再描画が必要な場合、(スレッド)メッセージキューには
ポストされることなく、直接 WndProc に WM_PAINT、WM_NCPAINT が
送られてくる。
また、PrintWindow() に渡す プロセスA の HDC を、MemoryDC にして、
常に固定のハンドル値を渡してみた。すると、興味深いことに、
プロセスB では、ほぼ毎回異なる値の HDC が渡されることが分かった。
ただし、時々連続して同じ値の HDC が渡されてくる。連続回数は、
2回~10回くらいまでの開きがある。
なお、PrintWindow() の速度は思ったより遅く、プロセスB側が(敢えて)何も
描画しない場合でも、なぜか、1.3x10^(-4) ~7.1 x 10^(-3) (sec) 程度かかる。
つまり、50万クロック程度かかってしまう。ただし、有る程度の大きさの
グラフィックを書いても、余り速度は変わらない印象を受けた。環境は書かないが、
余り速くはない 3.0GHz の Dual CPU のマシンでの話。

343:デフォルトの名無しさん
18/12/20 17:27:58.15 t8x/0UH1.net
なお予告なく変更されることがあります

344:デフォルトの名無しさん
19/02/01 14:28:07.62 Y7K3gTaF.net
MFC アプリケーションのツールバーを移動すると、ツールバーの移動枠とマウスカーソルの位置が離れる
URLリンク(social.msdn.microsoft.com)

345:デフォルトの名無しさん
19/02/20 12:07:37.06 6ZQ0VW2w.net
スタティックビルドがうまくできたらうれしかった

346:デフォルトの名無しさん
19/03/04 21:22:00.31 w7LKY+n1.net
ウインドウを2枚用意して、片方を表に(上に)表示して、もう片方は裏にして見えないようにしている。で、裏の見えない方を
書き換えて、表のウインドウと入れ替えて、新しい描画のウインドウを出すということをしたいのです
裏メモリに書き込んで一瞬でモニターに出すという普通のやつをウインドウでします
裏でウインドウで書き込むとき、HIDE状態では書き込めないので、MINIMIZEの状態では出来ることがわかったので
そうしているのですが、問題はそれを最大化するときに、どうしても描画に時間がかかるというか、一瞬では出来ないのです
なので、アクティブ化せずに裏で最大化、あるいは、RESTOREする方法を探しているのですが、
APIのShowWindowとかだと、RESTOREもMAXIMIZEも必ずアクティブ化してしまうのですがいい方法はないでしょうか
いろいろとやってみて、2枚のウインドウに違う絵をかいておいて、片方をHIDE、片方をSHOWして、このHIDEと
SHOWと切り替えるってのが一番きれいに切り替わるようなのですが、書き込むとき、HIDEでは書き込めずに
MINIMIZEして書き込まないといけないので、MINIMIZEして書き込んだウインドウを表に出さずに大きくしてHIDE状態に出来れは
いいのですが


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch