2012-05-25 145 views
1

在Windows(Windows 7和更高版本)上獲取鼠標光標位置或按鈕狀態的最合適方式是什麼?我以前使用DirectInput,但我不再使用它,不希望。我看到有GetCursorPos,但是,我沒有看到任何獲取鼠標按鈕狀態的東西。我之前讀過的,只是閱讀窗口消息(如WM_LBUTTONUP)被認爲是實時應用程序的「緩慢」,所以我不知道任何其他選項。在Windows上獲取鼠標光標位置和按鈕狀態

回答

5

如果要輪詢/查詢當前光標位置,可以使用GetCursorPos。要查看按鈕狀態,請使用GetAsyncKeyState

如果您正在窗口中實現消息循環,您將獲得鼠標移動的通知是WM_MOUSEMOVE。您將通過列出的通知here收到鼠標輸入通知。

+0

如果我正確記得,'GetCursorPos'將是最後處理的消息中的當前值。如果你想讓鍵狀態與位置保持一致,你應該使用'GetKeyState',它也是最後處理的消息的當前狀態。 –

+0

@AdrianMcCarthy:不,「GetCursorPos」與「GetAsyncKeyState」一起使用,「GetMessagePos」與「GetKeyState」一起使用。 – jamesdlin

+0

@ jamesdlin:啊,謝謝你的糾正。 –

2

WM_LBUTTONUP與任何窗口消息一樣好,因爲窗口化遊戲非常棒,因爲它僅在鼠標單擊客戶區時才生成,所以您可以自由調整窗口大小並移動窗口。

作爲替代直接輸入,你可以用它佔用更多的代碼來初始化原料投入,但它去與鼠標的移動,因爲WM_INPUT產生的最佳途徑當物理移動鼠標,而不是光標,因此您可以將光標剪輯到客戶端區域,而不用擔心用戶可能撞到剪輯矩形的一側,並且鼠標移動消息不會再生成。 link