0

質問をしたところ、質問がはっきりしないとのコメントがありましたので、こちらが新しい質問です。

WIN32APIを使用して複数のウィンドウでアプリケーションを作成しようとしています。2つのウィンドウを作成しました。1つは親の子です。次に、メッセージループが発生しますが、残念ながら、親のWndProcのみがメッセージを受け取り、子は受け取りません。-つまり、wndProcは2回ではなく1回だけ呼び出されます。(それは期待される動作ですか?)

また、子ウィンドウ用に別のWndProcChild関数を作成し、独自のクラスを登録しようとしましたが、それでも役に立ちませんでした。

以下はコードの抜粋です(子ウィンドウの宣言とメッセージループのみ)

私はWin32の初心者なので、優しくしてください...ありがとう、ダン

wcEdit.lpfnWndProc   = WndProcChild;  
wcEdit.style         = CS_HREDRAW | CS_VREDRAW;  
wcEdit.cbClsExtra    = 0;  
wcEdit.cbWndExtra    = 0;  
wcEdit.hInstance     = hInstance;;  
wcEdit.hCursor       = 0;  
wcEdit.lpszMenuName  = 0;  
wcEdit.lpszClassName = L"child";  
RegisterClass(&wcEdit);  
edit_hwnd = CreateWindow(L"child",  L"child_title", NULL,    
     0, 0, 0, 0, ParentWindow,    
     NULL, global_instance, NULL);    

UpdateWindow(edit_hwnd);
while (GetMessage(&msg, NULL, 0, 0))  
{  
     TranslateMessage(&msg);  
     DispatchMessage(&msg);  
}  

達成したいことをもう一度説明します。WM_KEYDOWNメッセージを2回処理します。1回は親ウィンドウで、もう1回は子ウィンドウで処理します。私は実際にはそれらが親子である必要はありません。2つの異なるwndProcsを作成する手間が省けると思っただけです。

4

3 に答える 3

1

メッセージが 2 回届くことを期待しているようですねWM_KEYDOWN... そんなことはありません。キー フォーカスのあるウィンドウだけがWM_KEYDOWNメッセージを取得します。

于 2009-11-10T14:59:53.807 に答える
0

継承ウィンドウには、親と所有者という 2 つの属性があります。OS/2 ではこれらは個別のプロパティでしたが、Win32 では 1 つにまとめられました。このSOスレッドをチェックしてください:

于 2009-11-10T15:00:52.643 に答える
0

Windows でこれを実現する直接的な方法はないため、この問題を回避するためにフックまたは同様のアプローチを試すことができます。基本的には、他のウィンドウを所有するスレッドでキーダウン イベントを監視し、傍受する必要があります。SetWinEventHook関数から始めます。

于 2016-02-02T08:10:35.057 に答える