获取当前光标位置

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

我正在使用Win32和C ++。

并且一个快速的奖励问题:您如何隐藏光标/取消隐藏?


可能是重复的问题:如何获取光标位置 - Lightness Races in Orbit
2个回答

136

您可以通过调用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

您必须确保每次隐藏光标的调用都有相应的显示光标的调用。


5
GetCursorPos函数返回屏幕坐标,而问题明确要求窗口坐标。你的答案缺少ScreenToClient/MapWindowPoints函数。 - Sertac Akyuz
如果隐藏和显示的调用没有匹配,会发生什么?它会在窗口/程序关闭后仍然保持光标隐藏吗? - Banderi
如果你正在使用OpenGL,就像我发现这个问题时一样,你可能会发现GetClientRect(HWND, LPRECT)也是非常有用的,特别是当你需要翻转鼠标的 y 坐标轴时。祝好! - coolhandle01

17

GetCursorPos() 可以通过传递一个指向 POINT 结构的指针来返回光标的 x/y 坐标。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接