4

Button をクリックすると、その親に WM_COMMAND メッセージが送信されることはわかっていますが、このメッセージを送信するためにどのようなメッセージを受信するのでしょうか? ボタンのデフォルトの WndProc をオーバーライドしていますが、ボタンは WM_COMMAND メッセージを受信しません。そのため、ボタンが WM_COMMAND メッセージを送信する原因となるメッセージを知る必要があるため、その機能を複製できます。

4

4 に答える 4

3

実際には、WM_LBUTTONDOWN、WM_MOUSELEAVE、およびその他のいくつかの組み合わせであることがわかりました。たとえば、WM_COMMANDは、マウスがボタン上で押された場合にのみ起動され、WM_LBUTTONUPが起動されたときもボタン上にあります。スペースやエンターなどは、VK_ENTERのメッセージなどを処理するだけだと思います。

于 2010-12-20T23:53:53.593 に答える
0

メッセージはメッセージとして変換され、親コントロールに送信されるWM_COMMANDため、メッセージをオーバーライドすることはできません。これは、バックグラウンドで実行されるメカニズムです。WM_LBUTTONDOWNWM_COMMAND

スペースについて質問し、キーを入力します。これは、、...などの仮想キーコードで制御できvk_enterますvk_tab

于 2011-02-18T04:04:52.507 に答える
0

WM_COMMAND メッセージは、コントロールの親によって常に受信されます。プログラムでボタンをクリックしたい場合は、これを行うことができます:

::SendMessage( button_handle, BM_CLICK, 0, 0 );

WM_COMMAND の LPARAM は、button_handle を保持します。ボタンの呼び出しに関する情報を抽出できます

::GetWindowLongPtr( HWND( lParam ), GWL_USERDATA );

この情報は以前にこのように設定されている必要があります

::SetWindowLongPtr( button_handle, GWL_USERDATA, reinterpret_cast<LONG_PTR>( some_info ) );

たとえば、 some_info は、ボタン ラッパー オブジェクトへのポインターによって行うことができます。

于 2012-06-29T06:49:44.353 に答える
0

WM_LBUTTONUP だと思い出すようですが、Spy プログラムを使用して確認してください。

于 2010-12-20T21:56:40.977 に答える