确定鼠标是否水平移动(C ++)

时间:2013-12-09 19:54:13

标签: c++ winapi mouseevent

我可以通过捕获WM_MOUSEMOVE消息来检测窗口上的光标移动。此消息包含x和y坐标,但我需要弄清楚用户是否尝试水平或垂直移动鼠标。如果x坐标比y更显着变化,我想忽略垂直运动。我是否需要使用其他消息?谢谢!

1 个答案:

答案 0 :(得分:4)

大卫是对的,你可能需要跟踪状态。但是,有一个函数GetMouseMovePointsEx可以为您提供最多64个鼠标的先前坐标。你仍然需要有一个地图(或其他一些数据结构)来自己存储坐标,但是这个功能应该为你做很多工作。然后,我不确定该方法将如何与一个更手动的方法进行比较,只要决定鼠标开始哪里,这样你就知道要比较什么。 *(见下面的编辑)

获得之前的坐标后,您可以将起始位置与最新位置进行比较。如果差异大于某个任意数量(您决定),则执行您的代码。

*编辑:请在我上面链接的GetMouseMovePointsEx文档中阅读

  

GetMouseMovePointsEx函数搜索鼠标中的点   协调历史。如果函数找到了该点,则返回该值   在提供的点之前和之后的最后nBufPoints。

     

如果您的应用程序提供时间戳,则为GetMouseMovePointsEx   函数将用它来区分两个相等的点   在不同时间录制。

     

应用程序应使用鼠标坐标调用此函数   从WM_MOUSEMOVE消息收到并将其转换为屏幕   坐标。