我知道按钮在单击时会将WM_COMMAND消息发送给它的父节点,但是它收到的消息是什么让它发送此消息?我覆盖了按钮的默认WndProc并且按钮没有收到WM_COMMAND消息,所以我需要知道什么消息导致按钮发送WM_COMMAND消息,所以我可以复制该功能。
答案 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_enter
,vk_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可以通过指针指向按钮包装器对象