【问题标题】:Move mouse cursor without triggering a WM_MOUSEMOVE移动鼠标光标而不触发 WM_MOUSEMOVE
【发布时间】:2012-05-13 21:24:29
【问题描述】:

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

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

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

有什么好的方法可以解决这个问题吗?

【问题讨论】:

  • 您无需调用GetCursorPos,导致WM_MOUSEMOVE 发布的移动位置已经在lParam 中。那么你就不会有“异步”问题了。
  • @SertacAkyuz 问题在于,您仍然需要依靠窗口位置来确定鼠标相对于屏幕的位置,并且窗口位置可以在程序锁定时更改别的东西。

标签: winapi mousemove


【解决方案1】:

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

【讨论】:

  • 谢谢,我以前从未听说过原始输入 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 2023-03-12
  • 2016-09-24
  • 2019-01-12
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多