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