我知道一個按鈕,當點擊時,發送WM_COMMAND消息給它的父,但它收到什麼信息,使它發送此消息?我重寫了按鈕的默認WndProc,並且該按鈕沒有收到WM_COMMAND消息,所以我需要知道什麼消息導致按鈕發送WM_COMMAND消息,以便我可以複製該功能。什麼消息導致一個按鈕發送一個WM_COMMAND消息
4
A
回答
3
我發現它實際上是WM_LBUTTONDOWN,WM_MOUSELEAVE和其他一些東西的組合。例如,只有鼠標在按鈕上被按下時,WM_COMMAND纔會被觸發,並且當WM_LBUTTONUP被觸發時,WM_COMMAND仍然在按鈕上。至於空間,輸入等,我相信它只是處理VK_ENTER消息和東西。
0
我似乎記得它是WM_LBUTTONUP,但使用間諜程序找出肯定。
+1
什麼,當你的信息用空格鍵點擊它?或者回車鍵?或者用加速鍵? – 2010-12-20 22:41:04
0
無法覆蓋WM_COMMAND
消息,因爲WM_LBUTTONDOWN
消息被轉換爲WM_COMMAND
消息並將其發送給父控件。這是在後臺完成的機制。
你問到的空間,進入key.This可以通過虛擬鍵代碼像vk_enter
,vk_tab
控制...等,
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可以通過指針按鈕包裝對象
相關問題
- 1. autorelease並保留導致消息發送到釋放的消息
- 2. 向UnityWndClass發送「按鈕按下」消息
- 3. 按下按鈕時發送消息
- 4. 按下按鈕發送消息
- 5. LinkedIn發送消息到一個連接
- 6. 消息只發送第一個字
- 7. 發送一個xml消息到端口
- 8. SmsManager發送消息不止一個
- 9. 創建和發送一個HttpResponse消息
- 10. 發送消息導致出現異常
- 11. 按F10導致WM_SETCURSOR消息
- 12. 只發送一次消息,而不是定期發送消息
- 13. 發送JMS消息導致通過JMS主題發送消息時警告
- 14. Facebook發送一條消息
- 15. 發送按鈕錯誤消息轉義
- 16. 預定義消息Facebook發送按鈕
- 17. Socket.io發送兩個消息
- 18. 如何向Telegram發送消息,其中包含一個提示用戶轉發消息的按鈕?
- 19. 一個簡單的查詢導致「服務器消失」消息
- 20. 什麼是導致此錯誤消息?
- 21. 按下回車鍵確認按鈕的消息框導致重複消息框
- 22. Slack發送直接消息到SLACK上的所有消息(非羣組消息我想發送個人消息
- 23. 在erlang消息上可以發送什麼類型的消息?
- 24. 發送消息
- 25. 發送消息
- 26. 發送消息
- 27. 一個消息/條
- 28. 當回車鍵發送消息到另一個窗口按
- 29. 發送消息從一個演員到另一個演員
- 30. 從一個端口發送消息到另一個端口
你可以調用舊的WndProc作爲任何你不明確想要陷阱的消息的按鈕。 (從內存中,我認爲它是'GetWindowLongPtr(hWnd,GWL_WNDPROC)'來檢索它...)這應該讓你的新按鈕發送正常的WM_COMMAND消息,同時讓你掛鉤做任何你想要的做。真的不知道這是否對你的情況有好處,雖然... – 2010-12-21 00:22:02
@brone不,它不是,我需要能夠分辨按鈕是否真正「按下」(根據按鈕的規則),除了原WndProc,所以我可以做我自己的東西。在父窗口中捕獲WM_COMMAND並不是我所需要的。 – 2010-12-21 00:28:33