【发布时间】:2013-12-28 01:14:48
【问题描述】:
我正在使用 WM_MOUSEMOVE 来更改鼠标位置。例如,在模拟“旋钮”时,希望让用户无限制地用鼠标上下移动。在这种情况下,我隐藏光标并使用 SetCursorPos 在用户每次移动时更改其位置,并仅检测与原始位置的差异。
不幸的是,它似乎不起作用 - 如果我设置鼠标位置,它有时会起作用,但有时会相距一个或多个像素,这是错误的。更大的麻烦是,在调用之后似乎传递了另一个 WM_MOUSEMOVE,不幸的是,它做了同样的事情,因为它想再次将光标移回原始位置。所以它最终会陷入无限循环或设置鼠标位置并接收消息,直到用户释放鼠标按钮。
什么是正确的方法或有什么问题?
【问题讨论】:
-
你能用鼠标上的滚轮代替 x/y 吗?
-
我认为您可以使用 DirectX 来获取原始鼠标输入消息,这些消息只是“鼠标移动了这么远”,而不是被转换为(并限制为)屏幕坐标。尝试寻找 DirectInput 示例代码。
-
鼠标滚轮怕是太笨拙了,还是用吧。 DirectInput 可能会工作,但我真的不想进入这些深水区,该软件必须在非常旧的机器上工作,而 DirectInput 甚至可能不适合。更不用说为了让 DX 为这种微不足道(但显然不是)的事情工作而付出的所有努力。
-
另外,请考虑如果用户将您的“旋钮”移动很长一段距离,他们将不得不拿起鼠标并再次将其放下,可能会多次。您可以考虑让他们将鼠标绕圈移动(转动旋钮),而不是直接向上或向下移动;这对用户来说可能更容易,并且可以避免您的屏幕边界问题。
-
我知道,但我认为不会那么糟糕。我个人认为使用“按角度旋转”非常混乱且难以使用。