2012-05-13 70 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。 –