- ベストアンサー
CWndのメンバ変数m_hWndへの値の代入はいつ行われる?
CWndにはメンバ変数m_hWndが有りますが、このm_hWndに値が代入されるのは、いつ、どのコードで実施されるのでしょうか? お分かりの方よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
うそついてました(^^;; CWnd::CreateExと、CWnd::Attachになります。 CWnd::Createでは、実際にこの中で格納が行われるのではない点に注意してください。 具体的には、 1. ::SetWindowsHookExでフックをかける 2. ::CreateWindowExでウィンドウを作成する 3. フックのコールバック関数の中でCWnd::Attachを呼び出し、ウィンドウハンドルを格納する。 となります。 結構複雑ですねぇ。 目で追っただけなんで、間違ってるかも・・・ #VC++6.0 SP5で確認してます。 こういうコアなところについて知識を深めたいのであれば、 MFCより、Win32SDKだけでウィンドウアプリを作っていく 方がいいですよ。
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>というか、MFCにて最初に初心者が躓くことは、SDKと違いすぎてSDKでやったあれはMFCでは見当たらないけどどうなっちゃったの?と言うことなんですよ。 うーん、SDK、API知ってればたいていのことはMFCでも何とかなるんですけどね。自分でソース追えるはずですし。 たとえば、CWndのメンバ関数なんて、ほとんどがウィドウハンドルをパラメータに持つAPIと、ウィンドウメッセージをそのままラップしただけですよ。 SDKでの機能が見当たらないなんてことがあったら、 使いたいAPIでソースの中身を検索して、使ってるクラス 調べればいいんですよ。 で、一部動作が違うようなものに出会ってつまずいたら、MFCのソースを除いて実装を確認すればいいだけです。 SDK、APIでの開発が難しくて理解できないから、MFCをはじめました、 なんて人ではMFCは使いこなせないと思いますよ。 結局、中身は一緒なんですから。 MFCは、さまざまなケースに対応可能なように、実装が複雑になっています(今回のウィンドウハンドルの格納のように) ただし、オブジェクト指向というところからみれば、実装は大して気にしなくていいはずです。 お約束的な毎回必要とするようなもの(特にウィンドウプロシージャの記述)を隠蔽してくれているだけでも楽をしていると思えばいいのでは? もちろん、SDKができる人にとってはですが。
お礼
コメントありがとうございました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
デバッグすれば分かりますよ。 CWndをnewしてステップ実行していけば。
お礼
回答ありがとうございます。 >こういうコアなところについて知識を深めたいのであれば、 >MFCより、Win32SDKだけでウィンドウアプリを作っていく >方がいいですよ。 というか、MFCにて最初に初心者が躓くことは、SDKと違いすぎてSDKでやったあれはMFCでは見当たらないけどどうなっちゃったの?と言うことなんですよ。