只有移动鼠标后,ShowCursor才会生效

ShowCursor has no effect until the mouse is moved

本文关键字:ShowCursor 移动 鼠标      更新时间:2023-10-16

当同时按下左键和右键时,我需要隐藏光标。事实证明,除了鼠标移动出现小故障外,我的代码运行正常。

当我调用ShowCursor(FALSE)时,光标将按预期隐藏。之后,当我调用ShowCursor(TRUE)时,光标不会再次出现,直到下一次鼠标移动。我的观点是,只有鼠标事件发生后才能绘制。有没有办法强制重新绘制光标?

代码:

void SG::CursorManager::hideCursor(void) {
    while(ShowCursor(FALSE) >= 0);
}
void SG::CursorManager::showCursor(void) {
    while(ShowCursor(TRUE) <= 0);
}

如果我正确理解光标在Windows中的工作方式,那么必须调用SetCursor(IDC_...)才能立即显示光标。

问题是,光标通常从下面的窗口设置,作为对消息WM_SETCURSOR的响应。ShowCursor()的思想是禁用/启用WM_SETCURSOR消息。禁用cursr时,它还会执行SetCursor(NULL),从而使光标消失。但是当启用光标时,它不能调用SetCursor(IDC_...),因为它不知道应该显示哪个光标。因此,它一直等到生成下一个WM_SETCURSOR,直到鼠标移动。