在移动鼠标之前,ShowCursor无效

时间:2013-07-22 09:33:37

标签: c++ winapi

当按下左右按钮时,我需要隐藏光标。事实证明我的代码按预期工作,除了鼠标移动的小故障。

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

代码:

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

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

1 个答案:

答案 0 :(得分:6)

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

事情是光标通常从下面的窗口设置,作为对消息WM_SETCURSOR的响应。 ShowCursor()的想法是禁用/启用WM_SETCURSOR消息。禁用cursr时,它也会SetCursor(NULL),以便光标消失。但是当启用游标时,它无法调用SetCursor(IDC_...),因为它不知道应该显示哪个游标。因此它会等到下一个WM_SETCURSOR生成,直到鼠标移动为止。