2012-05-13 73 views
2

我想使用SetCursorPos將鼠標置於窗口中間(如在FPS遊戲中)。移動鼠標光標而不觸發WM_MOUSEMOVE

問題是,當我這樣做時,我的窗口收到一個WM_MOUSEMOVE - 這最多可以消除用戶想要的任何移動,最壞的情況是進入反饋循環。

我曾考慮使用GetCursorPos讀取位置,並忽略該消息,如果它與SetCursorPos中的位置相同。這種方法的問題在於鼠標是異步的。如果程序落後了,那麼GetCursorPos將返回一個與我預期不同的值 - 所以它不會忽略該消息。

有沒有解決這個問題的好方法?

+0

您不需要調用'GetCursorPos',導致'WM_MOUSEMOVE'發佈的移動位置已經在'lParam'中。那麼你將不會有'異步'問題。 –

+0

@SertacAkyuz問題在於,那麼你仍然需要依靠窗口位置來確定鼠標相對於屏幕的位置,並且在程序鎖定其他事情時窗口位置可以改變。 –

回答

3

這種輸入應該使用RawInput API來完成,並且在應用程序擁有焦點時隱藏光標。這意味着它不受屏幕限制,並且您實際上不處理鼠標事件。

+1

謝謝,我從來沒有聽說過Raw Input API。 –