4

我知道一个按钮在被点击时会向它的父级发送 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_LBUTTONUP,但使用 Spy 程序可以确定。

于 2010-12-20T21:56:40.977 回答
0

无法覆盖WM_COMMAND消息,因为WM_LBUTTONDOWN消息被转换为WM_COMMAND消息并将其发送到父控件。这是在后台完成的机制。

您询问了空格并输入键。这可以通过虚拟键码控制,例如vk_entervk_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 回答