我知道一个按钮在被点击时会向它的父级发送 WM_COMMAND 消息,但是它接收到什么消息使它发送这个消息?我正在覆盖按钮的默认 WndProc,并且该按钮没有收到 WM_COMMAND 消息,因此我需要知道是什么消息导致按钮发送 WM_COMMAND 消息,以便我可以复制该功能。
问问题
5865 次
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_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 回答