2010-12-21 71 views
3

如何檢查鼠標是否超過某個HWND?我曾嘗試使用WM_MOUSELEAVE和WM_MOUSEMOVE消息來跟蹤,但如果您單擊某個按鈕並將鼠標拖出按鈕,它將不會收到WM_MOUSELEAVE,直到鼠標被釋放,這太遲了,因爲:如何檢查鼠標是否超過控件

當你點擊一個按鈕,如果只發送WM_COMMAND消息:
1.鼠標本來在按鈕上鬱悶
2.鼠標移動到按鈕
3.釋放鼠標在按鈕上

我需要複製此功能。

回答

3

要複製此功能,只需撥打SetCapture(),即使鼠標離開它,鼠標消息也會發送到您的窗口。您可以在移動時閱讀當前的鼠標位置,並確定它是否仍在窗口/按鈕之上(我仍然不能100%確定您在做什麼)。而且,當釋放鼠標按鈕時,您可以撥打ReleaseCapture()來恢復發送鼠標消息的位置。

編輯:哦,你可以使用Windows API函數WindowFromPoint()來確定鼠標結束了哪個窗口。

+0

setCapture不是一個有效的解決方案,因爲多個按鈕需要同時知道。我非常確定SetCapture不是Button類的WndProc如何實現的,這是我需要模擬的。 – 2010-12-21 00:43:04

+0

嗯,它是有效的,即使由於您沒有提到的限制而無法在您的案例中使用。哦,我可以向你保證Windows按鈕控件使用SetCapture()。我已經多次複製了這個功能。 – 2010-12-21 00:46:24

+0

@Jonathan,謝謝,請看我的問題給Hans Passant。 – 2010-12-21 00:50:26

2

這是Windows內置的,它被稱爲'捕捉鼠標',SetCapture(hWnd)。即使鼠標移動到窗口外,它也可以確保獲得鼠標消息。你可以在WM_LBUTTONDOWN消息通知上調用它。

+0

我不在乎是否在窗口外面看到鼠標消息。 – 2010-12-21 00:35:53

+0

如果您不關心按鈕消息,則不要調用SetCapture()。奇怪的是,它顯示按鈕不再被按下很重要。這往往是沒有任何麻煩的類圖書館照顧。即使是本地的Windows BUTTON類也是如此。 – 2010-12-21 00:40:23

+0

@Hans so BUTTON使用SetCapture?多個按鈕如何同時工作? – 2010-12-21 00:44:28

相關問題