如何檢查鼠標是否超過某個HWND?我曾嘗試使用WM_MOUSELEAVE和WM_MOUSEMOVE消息來跟蹤,但如果您單擊某個按鈕並將鼠標拖出按鈕,它將不會收到WM_MOUSELEAVE,直到鼠標被釋放,這太遲了,因爲:如何檢查鼠標是否超過控件
當你點擊一個按鈕,如果只發送WM_COMMAND消息:
1.鼠標本來在按鈕上鬱悶
2.鼠標移動到按鈕
3.釋放鼠標在按鈕上
我需要複製此功能。
如何檢查鼠標是否超過某個HWND?我曾嘗試使用WM_MOUSELEAVE和WM_MOUSEMOVE消息來跟蹤,但如果您單擊某個按鈕並將鼠標拖出按鈕,它將不會收到WM_MOUSELEAVE,直到鼠標被釋放,這太遲了,因爲:如何檢查鼠標是否超過控件
當你點擊一個按鈕,如果只發送WM_COMMAND消息:
1.鼠標本來在按鈕上鬱悶
2.鼠標移動到按鈕
3.釋放鼠標在按鈕上
我需要複製此功能。
要複製此功能,只需撥打SetCapture()
,即使鼠標離開它,鼠標消息也會發送到您的窗口。您可以在移動時閱讀當前的鼠標位置,並確定它是否仍在窗口/按鈕之上(我仍然不能100%確定您在做什麼)。而且,當釋放鼠標按鈕時,您可以撥打ReleaseCapture()
來恢復發送鼠標消息的位置。
編輯:哦,你可以使用Windows API函數WindowFromPoint()
來確定鼠標結束了哪個窗口。
這是Windows內置的,它被稱爲'捕捉鼠標',SetCapture(hWnd)。即使鼠標移動到窗口外,它也可以確保獲得鼠標消息。你可以在WM_LBUTTONDOWN消息通知上調用它。
我不在乎是否在窗口外面看到鼠標消息。 – 2010-12-21 00:35:53
如果您不關心按鈕消息,則不要調用SetCapture()。奇怪的是,它顯示按鈕不再被按下很重要。這往往是沒有任何麻煩的類圖書館照顧。即使是本地的Windows BUTTON類也是如此。 – 2010-12-21 00:40:23
@Hans so BUTTON使用SetCapture?多個按鈕如何同時工作? – 2010-12-21 00:44:28
setCapture不是一個有效的解決方案,因爲多個按鈕需要同時知道。我非常確定SetCapture不是Button類的WndProc如何實現的,這是我需要模擬的。 – 2010-12-21 00:43:04
嗯,它是有效的,即使由於您沒有提到的限制而無法在您的案例中使用。哦,我可以向你保證Windows按鈕控件使用SetCapture()。我已經多次複製了這個功能。 – 2010-12-21 00:46:24
@Jonathan,謝謝,請看我的問題給Hans Passant。 – 2010-12-21 00:50:26