WM_COMMAND
Win32 で単純なフレームワークを作成していますが、メッセージをキャッチできないようです。WndProc を通過するすべてのメッセージを出力コンソールに出力しましたが、WM_COMMAND
メッセージはありません。私のプログラムは、ウィンドウと編集ボックス(「EDIT」クラスを含む)で構成されています。
これが私のその場しのぎのメッセージ ループです (これはテスト用です)。
MSG msg;
BOOL ret;
while( ( ret = ::GetMessage( &msg, NULL, 0, 0 ) ) > 0 )
{
if(msg.hwnd == NULL)
continue;
else if(ret == -1)
break;
else {
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
}
WndProc は次のとおりです。
LRESULT CALLBACK Win32Base::GlobalWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
Win32Base *pWindow;
pWindow = reinterpret_cast<Win32Base*>( GetWindowLong( hWnd, GWL_USERDATA ) );
if( pWindow ) {
MSG msgdata;
msgdata.hwnd = hWnd;
msgdata.message = msg;
msgdata.wParam = wParam;
msgdata.lParam = lParam;
return pWindow->OnMessage( msgdata );
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
エディットボックスもサブクラス化しています。WM_CHAR
メッセージなどはキャッチできますが、メッセージはWM_COMMAND
ありません(ただし、メッセージは存在しないはずです)。
子育ての仕方に問題があるのではないかと思います。Windows の親の動的変更を追加しました。コントロールが作成されたときに、まだ親がない可能性があります。したがって、 でコントロールを作成すると、WS_CHILD
親がないためエラーが発生します。そのため、親を割り当てるときに、WS_CHILD
スタイルも追加します (または、親を削除する場合は削除します)。これは良い習慣ですか?メイン ウィンドウが編集ボックスの WM_COMMAND メッセージを受信するのを妨げている可能性がありますか?
また、入力時にエディットボックス自体が再描画されないため、強制的に再描画する必要があり、非常に遅いです...