• ベストアンサー

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

  • テキストボックスの値を変数に代入したい。

    テキストボックスの値を変数に代入したいのですが、どういうコードを書けばいいですか? 例えばTextBox1の値を変数xに代入したいのですが。

  • メンバ変数に関して

    現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

  • 画像をクリックして変数に値を代入

    JavaScriptで、 ある画像をクリックして変数に10という値を代入したいと思っています。 ご存知の方いらっしましたらよろしくお願いします。 (「button」などで行う方法はわかります。)

  • ダイアログからビュークラスのメンバ変数へ代入するには?

    プログラミング初心者です. Visual C++.netを使っています. Viewクラスから,Domodal()にてあるダイアログを呼び出しました. ダイアログ上のあるボタンを押したら,Viewクラスのメンバ変数へ1を代入するという処理をしたいと考えています.  ラジオボタンやエディタコントロールであれば,DDXを利用すればよいと思うのですが,単なるボタンの場合はどうすれば,呼び出し元のViewクラスの値を操作(この場合,代入)出来るのでしょうか?

  • bシェルでシェル変数に変数に代入されている値の個数

    bシェル(Bourneシェル)で、シェル変数に変数に代入されている 値の個数を知りたいのですが、できるのでしょうか。 ----- #!/bin/sh A="1 2 3 4 5" echo $A 変数Aには、半角スペース区切りで、「1 2 3 4 5」と5個の値が 代入されています。 この設定されている値の個数、5を求めたいのですが、 どうすればよいのでしょうか。 Solaris8 Bシェル です。

  • SQLのmaxで求めた値を変数に代入する

    ex) select max(id) from table でかえってくる値を変数に代入するにはどのようにコーディングすればよいのでしょうか? ExcelVBAを使っています。

  • count(*)で取得した値をJAVAの変数に代入するには?

    SQLの話なんですが、 count(*)で取得した値をJAVAの変数に代入するには?

    • ベストアンサー
    • Java
  • 代入したのに値が更新されないんです・・・

    WindowsXP VC.netでプログラミングしているのですが、 PostMessageでコールされる関数のWPARAMを publicで宣言した変数に代入しても、 値が更新されないんです。。。 public: WPARAM m_wWP; とヘッダで定義して、 WPARAMの値が10であった時、 long testclass::PostCallFunc( WPARAM wparam, LPARAM lparam) { m_wWP = wparam; } とやってもm_wWPが10にならないんです。。。 とっても困っています。 ご存知の方がいらっしゃいましたらご教授ください。 よろしくお願いします。

  • 配列を使わずに、数字(連番)を使用した変数に値を代入したい。

    配列を使わずに、数字(連番)を使用した変数に値を代入したい。 お世話になっております。 配列を使わずに、数字(連番)を使用した変数($a1,$a2,$a3・・・)に、 forループを使って、値を代入したい。 #================================= for($i;$i<10;$i++){ $a??? = 10; #←ここがわかりません。 } #================================= どなたかご存知の方、ご教授ください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHP4で、メンバ変数の値を忘れてしまう2

    PHP4での質問です。 前の質問がわかりにくかったので、書き直しました。 オブジェクト指向的にいかがなものかとは思いますが、オブジェクトのメンバ変数を直接外部から変更したいと思います。 ---------<a.php>---------- class myClass {   var member = 0; } ---------<b.php>---------- $ary_c = array(); for ($i=0; $i<10; $i++) {   $c = new myClass();   $c->member = 1;   echo "(1)c->member=".$c->member;   array_push($ary_c, $c); } foreach ($ary_c as $c) {   echo "(2)c->member=".$c->member; } ------------------------------ 以上の様なソースで、(1)のデバッグライトでは、メンバ変数memberの値は1であるのに、(2)のデバッグライトでは、0になってしまいます。 この原因がお分かりのかた、もしよろしければ知恵をお貸し下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう