5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

MFC相談室 mfc23d.dll [無断転載禁止]©2ch.net

1 :デフォルトの名無しさん:2016/09/21(水) 00:20:48.44 ID:OfO+mYkd
Microsoft Foundation Classライブラリ専用スレです。

■MFC相談室 mfc21d.dll■
http://hibari.2ch.net/test/read.cgi/tech/1250919279/l50
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(v=VS.100).aspx

2 :デフォルトの名無しさん:2016/09/21(水) 02:30:56.74 ID:5qi85AkV
< `∀´>ニダー

3 :デフォルトの名無しさん:2016/09/21(水) 13:22:08.79 ID:QlBymPtT


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

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

6 :デフォルトの名無しさん:2016/09/21(水) 15:00:46.64 ID:DJrsIBwc
即死なんて見たこと無い

7 :デフォルトの名無しさん:2016/09/23(金) 17:10:11.66 ID:1AYxo37g
ひでぶ

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

9 :デフォルトの名無しさん:2016/09/25(日) 15:44:56.16 ID:fXLErY67
1000いったんでないの?、、ないかw

10 :デフォルトの名無しさん:2016/09/26(月) 22:01:57.62 ID:TukXLw2X
ドトネに負けたのか?

11 :デフォルトの名無しさん:2016/10/11(火) 01:01:55.41 ID:XtQ45pny
ネタくれ

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

13 :デフォルトの名無しさん:2016/10/15(土) 18:29:48.76 ID:gqlXN5xD
そろそろ埋めようぜ

14 :デフォルトの名無しさん:2016/10/17(月) 00:02:34.42 ID:rdSWZXJ7
埋め

15 :デフォルトの名無しさん:2016/10/17(月) 16:06:58.50 ID:rrzVlL3A
産め

16 :デフォルトの名無しさん:2016/10/17(月) 17:53:44.29 ID:WLzPflAs


17 :デフォルトの名無しさん:2016/10/17(月) 18:21:19.26 ID:WLzPflAs
そろそろ本気で埋めるか

18 :デフォルトの名無しさん:2016/10/18(火) 13:35:30.77 ID:w7Iv1X0L
埋める前に次スレ立ててくれ

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

20 :デフォルトの名無しさん:2016/10/22(土) 20:44:20.18 ID:cpluUqjP
過疎ってるな〜

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

22 :デフォルトの名無しさん:2016/11/01(火) 21:11:07.99 ID:fAr6l5+l
保守

23 :デフォルトの名無しさん:2016/11/03(木) 14:33:38.93 ID:kJS9Zyl0
CStdioFile::ReadStringでshiftjisのファイルをバッファに読み込んだんですが、
テキストファイルの内容は「あ」のみ

バッファの内容は
82 00 A0 00
でした。
unicodeなら
30 00 42 00

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

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

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

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

27 :デフォルトの名無しさん:2016/11/03(木) 16:27:10.81 ID:kJS9Zyl0
>>25
setlocaleしたら
42 30
となっちゃいました

>>26
そう書いていますが?・・・

28 :デフォルトの名無しさん:2016/11/03(木) 16:40:23.70 ID:s4829peE
>unicodeなら
>30 00 42 00
>か
>00 30 00 42

てのがおかしい。

29 :デフォルトの名無しさん:2016/11/03(木) 19:17:37.78 ID:Vul1aP3I
盛り上がってきましたw

30 :デフォルトの名無しさん:2016/11/03(木) 19:25:00.47 ID:bkzCM1IA
レス番消えてる。。。荒らしか

31 :デフォルトの名無しさん:2016/11/03(木) 19:31:17.07 ID:bkzCM1IA
片山ウザい氏ね

32 :デフォルトの名無しさん:2016/11/03(木) 21:26:45.01 ID:HYN+5xRW
たしかにマジウゼー

33 :デフォルトの名無しさん:2016/11/06(日) 23:23:45.08 ID:5/z3Ppl4
嫌われ者w

34 :デフォルトの名無しさん:2016/11/07(月) 21:17:10.96 ID:71HmpZSZ
プロセスが起動した状態で、
ツールバーのツールチップの文字列を取得、変更したいのですが
ちょっと手こずっています。アドバイスお願いします

以下の方法ではツールチップではなくボタン文字列が対象になるようです
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 :デフォルトの名無しさん:2016/11/08(火) 07:56:03.76 ID:Dir9NEfz
>>34
動的な変更は、やった事ないけど、このあたりでは?
ttp://home.att.ne.jp/banana/akatsuki/doc/mfc/mfc22/
アプリを普通に作っていれば、取得はボタンのリソースIDと同じIDを持つSTRINGリソース

36 :デフォルトの名無しさん:2016/11/08(火) 22:03:34.52 ID:fDzF2sx9
>>35
ありがとうございます

以下で無事できました
http://nsoft.blog60.fc2.com/blog-entry-1875.html

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

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

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

40 :片山博文MZ ◆T6xkBnTXz7B0 :2016/11/16(水) 23:02:25.51 ID:qcIR6hue
>>39
氏ね

41 :37:2016/11/16(水) 23:54:39.55 ID:7nJMKxmy
> 32x32だけだとユーザーに汚い画像を見せることになる。

解像度を変えてのテストはある程度してるけどあまり気になったことないなー
私の想定を超えたデバイスだと汚くなるのかな?Inkscapeは落とした。勉強してみます。
片山博士は大きく&色彩豊かなicon作った後でInkscape使って縮小/減色してるの?

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

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

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

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

46 :デフォルトの名無しさん:2016/11/17(木) 07:07:34.33 ID:gXcsVs3+
片山ueeeeeeeeeeeeeeee

47 :37:2016/11/17(木) 07:08:48.33 ID:0g51nw+9
詳しい説明ありがとう

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

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

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

51 :デフォルトの名無しさん:2017/01/17(火) 18:47:51.47 ID:BjvebHTO
CArrayの質問なんですが、

CArray<int> test;
test.SetSize(10);

とやった場合、test[0]〜test[9]までの値は、
0で初期化されていることは、前提として良い動作ですか?

ソースを見たところ、SetSize()で確保したバッファをいったんゼロクリアして、
その後、各要素に対してコンストラクタが呼ばれるようなので、
C++のintのコンストラクタが「なにもしない」という仕様なら大丈夫そうですが。

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

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

54 :デフォルトの名無しさん:2017/02/15(水) 15:11:12.80 ID:WDBEc38A
MFCでCEditをサブクラス化したいと思うのですがうまくいきません

サブクラス化時にFromHandlePermanetと言う関数が呼ばれてそこでASSERTに引っ掛かってしまいます

MSDNによると「SubclassWindowを呼び出す時、ウィンドウがMFCオブジェクトに結びつけられていないようにしろ」とあります

馬鹿で申し訳ないのですが、ウィンドウがMFCオブジェクトに結びつけられるのはどのタイミングなのでしょうか?
今はCEdit::Create後にサブクラス化を試みています

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

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

57 :デフォルトの名無しさん:2017/02/15(水) 17:29:15.59 ID:WDBEc38A
>>56
ありがとうございます

しかしながらCEditから派生させたクラスをnewを使用して動的に作成しています

newによりインスタンスを動的に作成

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

サブクラス化

ASSERT

58 :デフォルトの名無しさん:2017/02/15(水) 17:43:20.32 ID:WDBEc38A
途中で送信してしまいました

現状はこんな感じでアサートに引っ掛かってしまいます

デバッガで追うとウィンドウのMAP(?)にサブクラス化対象のウィンドウが既に存在しているとアサートされるようなのですが、このウィンドウマップにどこで登録されるのかが解りません
マップに登録される=MSDNの言う「ウィンドウをMFCオブジェクトに結び付ける」と言うことなのかと推測しています

59 :デフォルトの名無しさん:2017/02/15(水) 17:49:31.94 ID:urFAvqLF
その工程ならサブクラス化はいらないはず

でもウィザードを使わずにクラスを作ったら
おまじないマクロがついてこないんじゃないかな

後始末のときにオブジェクト開放が先かウインドウ破棄が先かってのも迷う

60 :デフォルトの名無しさん:2017/02/15(水) 19:18:20.41 ID:WDBEc38A
>>59
ありがとうございます

説明不足で申し訳ありません
そもそも何故エディットボックスをサブクラス化したいかというとエディットボックスのコンテキストメニューを改造したいためなのです
エディットボックスにくるWN_RBUTTONDOWNをトラップするため、サブクラス化が必須になっている次第です

61 :デフォルトの名無しさん:2017/02/15(水) 19:36:45.27 ID:sI0w68I3
>>60
http://www.ne.jp/asahi/hishidama/home/tech/vcpp/subclsi.html

62 :デフォルトの名無しさん:2017/02/15(水) 19:40:04.43 ID:8VpWPRqB
Createするから既存になってしまうんじゃないの?

>>57でいうサブクラス化ってSubclassWindow? SubclassDlgItem?

CEditのサブクラスは時々使うけどSubclassWindow経由では使ってないので
外してたらスマソ

63 :62:2017/02/15(水) 19:46:05.27 ID:8VpWPRqB
私がやるのは
https://support.microsoft.com/ja-jp/help/403856
の一番下のやり方。

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

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

66 :デフォルトの名無しさん:2017/02/15(水) 20:56:19.16 ID:WDBEc38A
>>62
ありがとうございます

SubclasDlgItemを使っています
ですがデバッガで追うと結局は内部でSubclassWindowをを呼び出しているのは確認しています

67 :デフォルトの名無しさん:2017/02/15(水) 20:58:48.04 ID:WDBEc38A
>>64
ありがとうございます

DDXは使っていません
リソースにエディットボックスコントロールを貼りつけてはおらず、プログラム中でCEditクラスを派生したクラスを動的に作成しています

68 :デフォルトの名無しさん:2017/02/15(水) 21:01:57.77 ID:WDBEc38A
>>65
エディットボックスのマウス右クリックはサブクラス化が必要なようです

でも確かになにかコンテキスト〜というメッセージがあったような気もしないでもないのですが…
WEBで調べた限りですと右クリックメッセージをフックしているのしか出てきませんでした

69 :62:2017/02/15(水) 21:37:49.75 ID:8VpWPRqB
回答ではなく代替案ですが

1. CEditのサブクラスでOnContextMenuをオーバーライドしてメニュー処理を記述。

2. https://support.microsoft.com/ja-jp/help/403856
  中の
  また、CDialog::DoDataExchange() で DDX を使用して..
  のやりかたで CEditをCYourEditに変更。

で独自のコンテキストメニューは出ますよ。

70 :デフォルトの名無しさん:2017/02/15(水) 21:47:42.01 ID:WDBEc38A
>>69
おおおお!!!
ありがとうございます!

早速試してみます!




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

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

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

73 :デフォルトの名無しさん:2017/02/27(月) 15:33:23.44 ID:APOfiEEu
>>71
これは失礼しました
解決しましたのでご報告致します

結果的にはサブクラス化出来ました
動的にCEditを生成した際、実際のコントロールをCriateメソッドで生成すると思いますが一旦生成してしまうとサブクラス化できないようです

CMyEdit pualic CEdit として派生
CMyEdit lpCMyEdit = new CMyEdit;
lpCMyEdit->SubclassWindow(...←ここでサブクラス化
lpCMyEdit->Crate(...←コントロール作成

上記の手順でサブクラス化できましたのでWM_CONTEXTやWM_CHARに対してメッセージトラップが可能になりましたので全て実現できました

MFCのいう、ウィンドウの関連付けというのは恐らくコントロール作成時にWindowMapというMFCのクラスに登録されることかと思われます

改めて色々と相談に乗っていただき有り難うございました
また何かありましたら質問させて頂きます

>>72
間一髪間に合いました

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

75 :デフォルトの名無しさん:2017/03/02(木) 18:53:27.03 ID:5095SEQp
>>73
リソースにエディットがないのに、SubclassWindow()を呼び出したって…
一体何をサブクラス化したんだろう…

リソースにエディットがなければ Create() だけでいい

リソースにエディットがあるなら SubclassWindow() だけでいい
(この場合は、69さんの2のやり方が普通だと思う)

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

77 :デフォルトの名無しさん:2017/03/02(木) 19:58:19.05 ID:i8opxKVO
>>75
MFC使い方がよくわかってなくて混乱させているようで誠に申し訳ないです…

CEditをnewにて動的に作っていますのでリソースは一切使っていないです

具体的にはエクセルのシートの様な格子形のグラフィックを描画し、そのカラムをクリック等された際にエディットボックスを動的にカラムの座標に作っています

78 :デフォルトの名無しさん:2017/03/03(金) 12:50:31.31 ID:fzOn+GKU
>>76
SubclassWindowにはCEdit派生の独自クラスを渡しています

自分は普段SDKしか使わないためSDKの感覚なのですが、ウィンドウのサブクラス化とは、サブクラス化したいウィンドウハンドルのウィンドウプロシジャのアドレスを別途作成した独自ウィンドウプロシジャのアドレスと差し替える事と認識しています
ですのでSubclassWindowに渡すハンドルはサブクラス化したいウィンドウのハンドルと思っていましたが何か別のパターンがあるのでしょうか?

79 :デフォルトの名無しさん:2017/03/03(金) 16:16:47.27 ID:Mc9uDdoy
>>78
> CMyEdit public CEdit として派生
> CMyEdit* lpCMyEdit = new CMyEdit;
ここでは、まだウィンドウは無い (コンストラクタに小細工がなければ)

> lpCMyEdit->SubclassWindow(...←ここでサブクラス化
もし以下のように書いたとしても、ハンドルは NULL だからサブクラス化できない
lpCMyEdit->SubclassWindow(lpCMyEdit->GetSafeHwnd());

> lpCMyEdit->Create(...←コントロール作成
この中で、ウィンドウが作成されサブクラス化される
なので SubclassWindow() の明示的な呼び出しは不要

80 :デフォルトの名無しさん:2017/03/03(金) 20:49:57.22 ID:GdXfDzVm
>>78
CEditをどういう風にカスタマイズしたいのかわからんが
>CEdit派生の独自クラス
の段階でそれを実装できないの?

通常サブクラス化を必要とするのは(通常の手段では)派生クラスを置けないダ
イアログ上のコントロールに対しての場合のみで、そうで無い場合は必要な機
能を実装したCEdit派生クラスをCreate()するだけで実現できると思うんだが・・

MFCでは(メッセージマップの仕掛けによって)ほぼ全てのメッセージを派生ク
ラスで独自処理を行えるので、サブクラス化は必要ないはずです。

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

82 :デフォルトの名無しさん:2017/03/03(金) 23:45:50.26 ID:fzOn+GKU
>>79
なるほど、確かに仰る通りです

MFCだと定義済みコントロールを作成したタイミングでサブクラス化が自動的に行われているんですか…知らなかった…

SubclassWindowの戻り値を確認してみます

83 :デフォルトの名無しさん:2017/03/03(金) 23:47:56.70 ID:fzOn+GKU
>>80
はい、とりあえずは、WM_CHARとWM_CONTEXTMENUをトラップしたいのです

どうも私の勘違いでサブクラス化は不要なんですかね…

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

85 :デフォルトの名無しさん:2017/03/04(土) 06:08:14.80 ID:5oPjtzPk
>83
不要

86 :デフォルトの名無しさん:2017/03/12(日) 16:57:53.13 ID:L/+Vp36z
>>85
はい、SubclassWindowは失敗していました

みなさんの言う通りコントロール作成時に暗黙にサブクラス化が行われているようです
とても勉強になりました
有り難うございます

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

88 :デフォルトの名無しさん:2017/03/12(日) 20:23:14.61 ID:DJd+bif5
サブクラス化というネーミングはイマイチだとずっと思ってた。
APIの名称から来てるから翻訳者に罪はないが、、

VS2017入れてみたけど_MFC_VERは変化なし。
残念だ。

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

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

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

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

93 :デフォルトの名無しさん:2017/04/14(金) 10:48:36.47 ID:L6e5ZQwW
確かWin32APIはsmalltalk由来のメッセージパッシング式オブジェクト指向を意識して作られたとかなんとか。
んで、C++はメッセージパッシング意識して作られてなかったから、言語自体を拡張されたのがC++Builderで、言語は拡張せず、メッセージテーブル作って無理くり対応したのがVCのMFCって何かで読んだ。

そう考えるとMFC以前はCでどうにかオブジェクト指向と言うより、メッセージパッシングを実現しようとしてWin32APIが出来たんだろね。

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

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

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

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

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

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

ない。

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

101 :デフォルトの名無しさん:2017/04/29(土) 21:27:44.34 ID:p2ephTDn
>>98
C#

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

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

104 :98:2017/05/01(月) 23:13:30.10 ID:MV/lR732
ご意見ありがとうございます。
参考にします。

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

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

107 :デフォルトの名無しさん:2017/05/23(火) 19:47:17.95 ID:U7efYych
MDIの子ウィンドウのハンドルはどこですかぁ〜

108 :デフォルトの名無しさん:2017/05/24(水) 06:22:57.52 ID:r4nnDW8T
>>107
CDocument::GetFirstViewPosition
CDocument::GetNextView

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

MSDNのCCriticalSectionの説明には、上のように書かれているのですが、
このスタンドアロン方式って、どういう意図なのでしょうか。

普通に読めば、関数の内部でローカル変数として宣言するように思えるのですが、
それだと全く排他制御になっていないのでは?

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

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

同期オブジェクトがプロセスで一つだけになのと同義。
マルチコア・マルチスレッドでロック待ちが無視できなくなるようなら他の使う。

112 :デフォルトの名無しさん:2017/05/31(水) 13:08:02.66 ID:ZVZYbrmW
>>111
クリティカルセクションという用語は>>111の言う様に元々「クリティカルな区間」のことだが、Win32では
スレッド間排他処理のための同期オブジェクトとして"CRITICAL_SECTION"があり、CCriticalSectionはこのラッパー。
( https://msdn.microsoft.com/ja-jp/library/cc429052.aspx にも"「クリティカル セクション」は、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クラスを使えと。

30 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)