2013-12-09 27 views
0

通過捕獲WM_MOUSEMOVE消息,我可以檢測到我的窗口上的光標移動。此消息包含x和y座標,但我需要弄清楚用戶是否試圖水平或垂直移動鼠標。如果x座標變化比y更顯着,我想忽略垂直運動。我需要使用其他消息嗎?謝謝!確定鼠標是否水平移動(C++)

+0

重新標記爲特定於Windows; C++不關心你的鼠標。 C++不知道你的鼠標存在。 –

+3

您需要跟蹤您獲得的最後一個mousemove事件,以便您可以比較兩者。而且你需要更清楚地說明「更顯着」的含義。你必須能夠給電腦實際的號碼。 –

回答

4

大衛是對的,你可能需要跟蹤狀態。但是,有一個函數,GetMouseMovePointsEx,它會給你多達64個先前的鼠標座標。你仍然必須有一個地圖(或其他數據結構)來存儲你自己的座標,但是這個功能應該爲你做很多工作。然後再次,我不確定該方法將如何與更多的手動方法進行比較,只要決定其中鼠標開始,以便您知道要比較的內容。 *(見下面的編輯)

一旦你有了以前的座標,你可以比較起始位置和最新的位置。如果差異大於某個任意數量(您決定),則執行您的代碼。

*編輯:就在GetMouseMovePointsEx文檔我上面

連接該點的GetMouseMovePointsEx功能搜索在鼠標 座標歷史閱讀。如果函數找到該點,它將返回包含所提供的點之前的最後一個nBufPoints的 。

如果您的應用程序提供時間戳,GetMouseMovePointsEx函數將使用它來區分 在不同時間記錄的兩個相等點。

應用程序應該使用從WM_MOUSEMOVE消息中收到的鼠標座標 調用此函數,並將它們轉換爲屏幕 座標。

+1

+1我從來不知道這個功能。看起來它可能在這裏很有用。 –

+0

大寫字母,我正在看一個叫做MOUSEINPUT結構的東西,它似乎跟蹤自從最後一次鼠標事件產生以來的運動量。雖然看起來相當複雜。 :) – IgorAtman

+0

@IgorAtman,看我的編輯。我現在也在看MOUSEINPUT。我不確定哪種解決方案最終會讓您更簡單。我知道這些東西有時看起來更復雜,因爲它們具有廣泛的功能,有時僅使用其中一種可用的功能非常簡單。 – caps