移动鼠标光标而不触发 WM_MOUSEMOVE

Rei*_*aka 5 winapi mousemove

我想使用SetCursorPos将鼠标在窗口中间(就像在 FPS 游戏中一样)。

问题是,当我这样做时,我的窗口会收到一个 WM_MOUSEMOVE——它充其量抵消了用户想要的任何移动,最坏的情况是进入反馈循环。

我考虑过使用 GetCursorPos 读取位置并忽略消息,如果它与我使用 SetCursorPos 移动它的位置相同。但是这种方法的问题在于鼠标是异步的。如果程序落后,那么 GetCursorPos 将返回一个与我预期不同的值——因此它不会知道忽略该消息。

有没有好的方法来处理这个问题?

Dea*_*nna 4

这种输入应该使用RawInput API 来完成,并且当应用程序获得焦点时光标会隐藏。这意味着它不受屏幕限制,并且您实际上并不处理鼠标事件。