什么消息导致按钮发送WM_COMMAND消息

时间:2010-12-20 21:47:53

标签: c++ button winapi wndproc wm-command

我知道按钮在单击时会将WM_COMMAND消息发送给它的父节点,但是它收到的消息是什么让它发送此消息?我覆盖了按钮的默认WndProc并且按钮没有收到WM_COMMAND消息,所以我需要知道什么消息导致按钮发送WM_COMMAND消息,所以我可以复制该功能。

4 个答案:

答案 0 :(得分:3)

我发现它实际上是WM_LBUTTONDOWN,WM_MOUSELEAVE和其他一些东西的组合。例如,只有在按钮上按下鼠标时才会触发WM_COMMAND,并且在触发WM_LBUTTONUP时仍然在按钮上。至于空间,输入等,我相信它只是处理VK_ENTER消息和东西。

答案 1 :(得分:0)

我似乎记得它是WM_LBUTTONUP,但是使用Spy程序来确定。

答案 2 :(得分:0)

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

您询问了空格并输入密钥。这可以通过vk_entervk_tab等虚拟密钥代码控制,

答案 3 :(得分: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可以通过指针指向按钮包装器对象