【问题标题】:Get current cursor position获取当前光标位置
【发布时间】:2011-09-19 09:43:46
【问题描述】:

我想获取窗口的当前鼠标位置,并将其分配给两个变量xy(相对于窗口的坐标,而不是相对于整个屏幕的坐标)。

我使用的是 Win32 和 C++。

还有一个小问题:你将如何隐藏/取消隐藏光标?

【问题讨论】:

标签: c++ winapi


【解决方案1】:

通过调用GetCursorPos获取光标位置。

POINT p;
if (GetCursorPos(&p))
{
    //cursor position now in p.x and p.y
}

这将返回相对于屏幕坐标的光标位置。调用ScreenToClient 映射到窗口坐标。

if (ScreenToClient(hwnd, &p))
{
    //p.x and p.y are now relative to hwnd's client area
}

你用ShowCursor隐藏和显示光标。

ShowCursor(FALSE);//hides the cursor
ShowCursor(TRUE);//shows it again

您必须确保每次隐藏光标的调用都与再次显示光标的调用匹配。

【讨论】:

  • 我对 downvote 的猜测是,GetCursorPos 检索屏幕坐标,而问题明确要求窗口坐标。您的答案中缺少ScreenToClient/MapWindowPoints
  • 隐藏调用和显示调用不匹配怎么办?即使在窗口/程序关闭后,它是否也会隐藏光标?
  • 如果您像我发现这个时一样使用 OpenGL,您可能会发现 GetClientRect(HWND, LPRECT) 和我在翻转鼠标 y 坐标时发现的一样有用。干杯
【解决方案2】:

如果你传入一个指向 POINT 结构的指针,GetCursorPos() 将返回给你 x/y。

可以使用ShowCursor()来隐藏光标。

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多