【发布时间】:2011-01-21 11:59:06
【问题描述】:
有没有办法在 C++ 中使用 winapi 获取鼠标状态(位置、按钮状态)? 我不想使用 Windows 消息(WM_MOUSEMOVE、WM_LBUTTONDOWN 等)。
谢谢!
【问题讨论】:
-
你不想使用它们等等?
标签: winapi visual-c++ windows-messages
有没有办法在 C++ 中使用 winapi 获取鼠标状态(位置、按钮状态)? 我不想使用 Windows 消息(WM_MOUSEMOVE、WM_LBUTTONDOWN 等)。
谢谢!
【问题讨论】:
标签: winapi visual-c++ windows-messages
听起来您正在寻找GetCursorInfo 和GetKeyState。后者您调用 virtual key codes 指定感兴趣的鼠标按钮。
【讨论】:
如果你只需要光标位置,你可以使用GetCursorPos()。请记住,GetCursorInfo() 和 GetCursorPos() 都返回屏幕坐标。使用ScreenToClient() 转换为客户区偏移量。
虽然 OP 不想使用 Windows 消息,但我只是想提一点作为旁注。
我发现将光标位置作为消息处理程序的一部分(例如 WM_SETCURSOR),大多数文献建议使用GetMessagePos() 在发送消息时检索光标的位置。但是,它的位置 之前 鼠标移动,而不是之后。因此,当尝试在某个区域上进行鼠标悬停检测时,位置返回“滞后”像素。
【讨论】:
GetCursorPos,因为在 WOW64 下的 64 位 Vista(可能是 64 位 XP)上存在错误。当您传递的指针位于高地址空间(> 2GB)时,该函数将失败。这在 Windows 7 中已修复,但我仍然更喜欢 GetCursorInfo,因为它适用于任何地方。