【问题标题】:Mouse state winapi鼠标状态winapi
【发布时间】:2011-01-21 11:59:06
【问题描述】:

有没有办法在 C++ 中使用 winapi 获取鼠标状态(位置、按钮状态)? 我不想使用 Windows 消息(WM_MOUSEMOVE、WM_LBUTTONDOWN 等)。

谢谢!

【问题讨论】:

  • 你不想使用它们等等?

标签: winapi visual-c++ windows-messages


【解决方案1】:

听起来您正在寻找GetCursorInfoGetKeyState。后者您调用 virtual key codes 指定感兴趣的鼠标按钮。

【讨论】:

    【解决方案2】:

    如果你只需要光标位置,你可以使用GetCursorPos()。请记住,GetCursorInfo() 和 GetCursorPos() 都返回屏幕坐标。使用ScreenToClient() 转换为客户区偏移量。

    虽然 OP 不想使用 Windows 消息,但我只是想提一点作为旁注。
    我发现将光标位置作为消息处理程序的一部分(例如 WM_SETCURSOR),大多数文献建议使用GetMessagePos() 在发送消息时检索光标的位置。但是,它的位置 之前 鼠标移动,而不是之后。因此,当尝试在某个区域上进行鼠标悬停检测时,位置返回“滞后”像素。

    【讨论】:

    • 我个人尽量避免调用GetCursorPos,因为在 WOW64 下的 64 位 Vista(可能是 64 位 XP)上存在错误。当您传递的指针位于高地址空间(> 2GB)时,该函数将失败。这在 Windows 7 中已修复,但我仍然更喜欢 GetCursorInfo,因为它适用于任何地方。
    • 出色的观察力。我正在将此添加到我的笔记中。这肯定是在调试时让你大吃一惊的事情之一。
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多