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

C++ 确定鼠标是否水平移动(C+;+;),c++,winapi,mouseevent,C++,Winapi,Mouseevent,我可以通过捕获WM_MOUSEMOVE消息来检测光标在窗口上的移动。此消息包含x和y坐标,但我需要弄清楚用户是水平移动鼠标还是垂直移动鼠标。如果x坐标的变化比y坐标的变化更显著,我想忽略垂直运动。我需要使用其他信息吗?谢谢 大卫说得对,你很可能需要了解国家的情况。但是,有一个函数,它将为您提供多达64个鼠标的先前坐标。您仍然需要有一个地图(或其他数据结构)来存储坐标,但该函数应该为您做大量的腿部工作。再说一次,我不确定该方法与更手动的方法相比如何,因为它决定了鼠标的起始位置,所以您知道该与什么进

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

大卫说得对,你很可能需要了解国家的情况。但是,有一个函数,它将为您提供多达64个鼠标的先前坐标。您仍然需要有一个地图(或其他数据结构)来存储坐标,但该函数应该为您做大量的腿部工作。再说一次,我不确定该方法与更手动的方法相比如何,因为它决定了鼠标的起始位置,所以您知道该与什么进行比较*(见下文编辑)

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

*编辑:只需在我上面链接的
GetMouseMovePointsEx
文档中阅读即可

GetMouseMovePointsEx函数在鼠标中搜索该点 协调历史。如果函数找到该点,则返回 最后一个NBUF点位于供应点之前,包括供应点

如果应用程序提供时间戳,则GetMouseMovePointsEx 函数将使用它来区分两个相等的点 在不同的时间被记录下来

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


大卫说得对,你很可能需要了解这个州的情况。但是,有一个函数,它将为您提供多达64个鼠标的先前坐标。您仍然需要有一个地图(或其他数据结构)来存储坐标,但该函数应该为您做大量的腿部工作。再说一次,我不确定该方法与更手动的方法相比如何,因为它决定了鼠标的起始位置,所以您知道该与什么进行比较*(见下文编辑)

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

*编辑:只需在我上面链接的
GetMouseMovePointsEx
文档中阅读即可

GetMouseMovePointsEx函数在鼠标中搜索该点 协调历史。如果函数找到该点,则返回 最后一个NBUF点位于供应点之前,包括供应点

如果应用程序提供时间戳,则GetMouseMovePointsEx 函数将使用它来区分两个相等的点 在不同的时间被记录下来

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


重新标记为特定于窗口;C++不关心你的鼠标。C++不知道你的鼠标存在。你需要跟踪你得到的最后一个MSOMEVER事件,这样你就可以比较这两个事件。你需要更清楚你所说的“更有意义”是什么意思。您必须能够向计算机提供实际数字。重新标记为特定于Windows;C++不关心你的鼠标。C++不知道你的鼠标存在。你需要跟踪你得到的最后一个MSOMEVER事件,这样你就可以比较这两个事件。你需要更清楚你所说的“更有意义”是什么意思。你必须能够给计算机提供实际的数字。看起来它在这里很有用。caps,我正在研究一种叫做MOUSEINPUT结构的东西,它似乎跟踪“自上次鼠标事件生成以来的运动量”。不过看起来很复杂。:)@伊格拉特曼,看我的编辑。我现在也在看鼠标输入。我不确定哪种解决方案最终会更简单。我知道这些东西有时看起来更复杂,因为它们有广泛的功能,而有时只使用一个可用的功能是非常简单的。+1我从来不知道这个功能。看起来它在这里很有用。caps,我正在研究一种叫做MOUSEINPUT结构的东西,它似乎跟踪“自上次鼠标事件生成以来的运动量”。不过看起来很复杂。:)@伊格拉特曼,看我的编辑。我现在也在看鼠标输入。我不确定哪种解决方案最终会更简单。我知道这些东西有时看起来更复杂,因为它们有广泛的功能,而有时只使用一个可用的功能是非常简单的。