• ベストアンサー

CWndのメンバ変数m_hWndへの値の代入はいつ行われる?

CWndにはメンバ変数m_hWndが有りますが、このm_hWndに値が代入されるのは、いつ、どのコードで実施されるのでしょうか? お分かりの方よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

うそついてました(^^;; CWnd::CreateExと、CWnd::Attachになります。 CWnd::Createでは、実際にこの中で格納が行われるのではない点に注意してください。 具体的には、 1. ::SetWindowsHookExでフックをかける 2. ::CreateWindowExでウィンドウを作成する 3. フックのコールバック関数の中でCWnd::Attachを呼び出し、ウィンドウハンドルを格納する。 となります。 結構複雑ですねぇ。 目で追っただけなんで、間違ってるかも・・・ #VC++6.0 SP5で確認してます。 こういうコアなところについて知識を深めたいのであれば、 MFCより、Win32SDKだけでウィンドウアプリを作っていく 方がいいですよ。

VitaminBB
質問者

お礼

回答ありがとうございます。 >こういうコアなところについて知識を深めたいのであれば、 >MFCより、Win32SDKだけでウィンドウアプリを作っていく >方がいいですよ。 というか、MFCにて最初に初心者が躓くことは、SDKと違いすぎてSDKでやったあれはMFCでは見当たらないけどどうなっちゃったの?と言うことなんですよ。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>というか、MFCにて最初に初心者が躓くことは、SDKと違いすぎてSDKでやったあれはMFCでは見当たらないけどどうなっちゃったの?と言うことなんですよ。 うーん、SDK、API知ってればたいていのことはMFCでも何とかなるんですけどね。自分でソース追えるはずですし。 たとえば、CWndのメンバ関数なんて、ほとんどがウィドウハンドルをパラメータに持つAPIと、ウィンドウメッセージをそのままラップしただけですよ。 SDKでの機能が見当たらないなんてことがあったら、 使いたいAPIでソースの中身を検索して、使ってるクラス 調べればいいんですよ。 で、一部動作が違うようなものに出会ってつまずいたら、MFCのソースを除いて実装を確認すればいいだけです。 SDK、APIでの開発が難しくて理解できないから、MFCをはじめました、 なんて人ではMFCは使いこなせないと思いますよ。 結局、中身は一緒なんですから。 MFCは、さまざまなケースに対応可能なように、実装が複雑になっています(今回のウィンドウハンドルの格納のように) ただし、オブジェクト指向というところからみれば、実装は大して気にしなくていいはずです。 お約束的な毎回必要とするようなもの(特にウィンドウプロシージャの記述)を隠蔽してくれているだけでも楽をしていると思えばいいのでは? もちろん、SDKができる人にとってはですが。

VitaminBB
質問者

お礼

コメントありがとうございました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

デバッグすれば分かりますよ。 CWndをnewしてステップ実行していけば。

関連するQ&A