2011-09-13 9 views
0

さて、私はtrynaが何をしているのか最初に少し概要を説明します。
メインの親ウィンドウに3つの子ウィンドウを作成しようとしています。EnumChildWindowEnumChildProcを使用して3つの子ウィンドウを作成します。親のと同じ高さが、1 /第三幅、およびそれらを1つずつ揃える。..だから、このCreateWindowEx関数の何が問題なのですか?

は、私が移動してMoveWindowを使用してそれらを揃えるために、これらの子ウィンドウを作成するためにWM_CREATE MSGを捕らえ、そしてWM_SIZE、すべてが正常です子ウィンドウが作成されないという事実を除いて。私はそれをデバッグするとき、私は(自動車ウィンドウで2008 Visual Studioで、デバッグ中に)私のCreateWindowEx文が実行取得されていないことがわかった(自動車の窓は「式はを評価することができない。」と述べ

ここでステートメントがあります:当然の

CreateWindowEx(0, (LPCWSTR)("childClass"), (LPCWSTR)NULL, WS_CHILD | WS_BORDER, 0, 0, 0, 0, hWnd, (HMENU) (int) (ID_FIRSTCHILD + 1), hInst, NULL); 

私は3つのウィンドウを作成するには、forループでそれを使用していたが、それは他のことだ...
だから、誰も助けてください/ガイドは/ここで何が起こっているのか私にアドバイスすることができますか?または何が間違っているのですか?

ps:私はこのコードを入手した場所からこの電子ブックを読んでいるので、別のアプローチや何かを採用するように言わないでください。子供の作成コードをどこかに置くなどしてください...私はプログラムを作っていないのでちょうど本の例を以下の... :)

+1

あなたにもその本から '(LPCWSTR)( "childClassを")'コピーがありますか?それは本当に機能しますか? –

+0

ええ、それはこの本のようでしたが、私は親のものと同じクラスに変更しようとしました。つまり、Visual Studioがメインウィンドウ用にデフォルトで作成する 'szWindowClass'ですが、いずれか.. – Razort4x

+1

私は本当にわかりませんが、それは私には奇妙なにおいがします。それは '.lpfnWndProc'がPROCながらWndProc''に設定されているように 'L「childClass」'でそれを交換してみてください... –

答えて

1

私の霊魂力はあなたの子ウィンドウのための上記のcreateWindowコールにWS_VISIBLEスタイルで渡す必要が示唆 - あなたはそれらを見えることができます。 :)

私の開発経験は、次のことを示唆している:

のCreateWindowExの戻り値は何ですか?変数に戻り値を割り当てましたか?もしそうなら、デバッガでその行にブレークポイントを設定しましたか? CreateWindowからの戻り値がNULLの場合、GetLastError(デバッガで "@err"として評価できます)とは何ですか?

あなたのメインウィンドウが(目に見えない子供たちと一緒に)ポップアップした後、あなたは子ウィンドウが存在するかどうかを確認するためにスパイ++を実行したのですか?彼らの状態は何ですか?

そうしないと、あなたの子ウィンドウクラスのWndProcメソッドのWM_CREATEのコールバックが呼び出さなっていることを確認しましたか?

+0

はい、デバッガでチェックしたところ、呼び出しがNULLを返しました。その後、@errが1407を返しました。これは、グーグルで見つかった場合、 'CreateWindowEx'で指定されたウィンドウクラスが登録されていないことを示します。 また、このクラスを登録すると、WndClassEx :: lpfnWndProcメソッドで指定する必要がある子ウィンドウ用にこれを登録するので、親クラスでは、その値は 'WndProc'です。だから、このケースでも同じでなければならないのでしょうか? この "ChildClass"を登録する必要がありますか?以前私はこのテキスト文字列をコードに配置しましたが、実際には何も指定していません。 – Razort4x

+0

同じウィンドウクラスのすべてのインスタンスは、同じwndprocコールバック関数を持ちます。おそらく2つのウィンドウクラスが必要です。 1つは親ウィンドウ用で、もう1つは子ウィンドウ用です(各ウィンドウクラスには別々のwndproc関数コールバックがあります)。アプリケーションの起動時に両方のウィンドウクラスを登録します。別々に動作する場合は、CreateWindowのlpParam引数を使用して初期化データを各ウィンドウに渡します。 – selbie

関連する問題