Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 如何确定Win32中线程的光标可见性?_Winapi - Fatal编程技术网

Winapi 如何确定Win32中线程的光标可见性?

Winapi 如何确定Win32中线程的光标可见性?,winapi,Winapi,每个线程都有自己的游标计数,由ShowCursor调用递增/递减。 是否有方法查询该计数器以确定光标当前是否可见 这种模式应该是有效的,但存在一些问题: ShowCursor (FALSE); bool visible = (ShowCursor (TRUE) >= 0); windows应用程序兼容层可能不允许计数器降低到0以下,因此第一个ShowCursor调用不执行任何操作,而第二个调用会损坏计数器 它有一些不必要的副作用,比如潜在的和不必要的光标隐藏/取消隐藏 您可以直接使用G

每个线程都有自己的游标计数,由ShowCursor调用递增/递减。 是否有方法查询该计数器以确定光标当前是否可见

这种模式应该是有效的,但存在一些问题:

ShowCursor (FALSE);
bool visible = (ShowCursor (TRUE) >= 0);
  • windows应用程序兼容层可能不允许计数器降低到0以下,因此第一个ShowCursor调用不执行任何操作,而第二个调用会损坏计数器
  • 它有一些不必要的副作用,比如潜在的和不必要的光标隐藏/取消隐藏

您可以直接使用GetCursorInfo()测试光标可见性


我不确定这个调用失败意味着什么,所以如果失败,我就让它返回false。

您可以直接使用GetCursorInfo()测试光标可见性


我不确定调用失败意味着什么,所以如果调用失败,我就让它返回false。

文档中甚至有这样的说明:“调用以确定光标可见性。”GetCursorInfo返回“全局”光标的状态。这样,无论光标在屏幕上的什么位置,都可以得到它的状态。但是ShowCursor会处理每个线程的计数,这会影响从特定线程创建的窗口。是的,但不管光标是否在屏幕上,最终都不重要。每个线程的可见性计数是一个实现细节。我想我不明白你想做什么。无论如何,谢谢你的回复!我想我应该通过GetCursorInfo获得全局位置,然后确定光标是否位于我的一个窗口之上(通过WindowFromPoint)。如果是,那么我可以使用GetCursorInfo的结果标志。这甚至在文档中有说明:“调用以确定光标可见性。”GetCursorInfo返回“全局”光标的状态。这样,无论光标在屏幕上的什么位置,都可以得到它的状态。但是ShowCursor会处理每个线程的计数,这会影响从特定线程创建的窗口。是的,但不管光标是否在屏幕上,最终都不重要。每个线程的可见性计数是一个实现细节。我想我不明白你想做什么。无论如何,谢谢你的回复!我想我应该通过GetCursorInfo获得全局位置,然后确定光标是否位于我的一个窗口之上(通过WindowFromPoint)。如果是,那么我可以使用GetCursorInfo中的结果标志。“windows应用程序兼容层可能会默默地不允许计数器减小到0以下”-自那以后,我怀疑。“不必要的副作用,如潜在的和不必要的光标/取消隐藏”-也许,但它可能太快而无法真正注意到。当然,始终存在
WM_SETREDRAW
LockWindowUpdate()
“可疑,因为负值是有效的。”是的,但有些(旧)游戏由于某种原因,内置兼容层不允许隐藏光标。“windows应用程序兼容层可能默认不允许计数器减小到0以下”-从那时起就有疑问。“不必要的副作用,如潜在的和不必要的光标/取消隐藏”-也许,但它可能太快而无法真正注意到。当然,总会有
WM_SETREDRAW
LockWindowUpdate()
“因为负值是有效的。”是的,但有些(旧)游戏由于某种原因内置兼容层不允许隐藏光标。
bool IsCursorVisible()
{
    CURSORINFO ci = { sizeof(CURSORINFO) };
    if (GetCursorInfo(&ci))
        return ci.flags & CURSOR_SHOWING;
    return false;
}