延迟在客户区隐藏鼠标光标?
Hide mouse cursor in client area with delay?
我正在用 C 编写 Windows 应用程序。
我通过处理 WM_SETCURSOR
消息将鼠标光标隐藏在 window 的客户区:
case WM_SETCURSOR:
{
static BOOL HideCursor = FALSE;
if ((LOWORD(LParam) == HTCLIENT) && !HideCursor)
{
HideCursor = TRUE;
ShowCursor(FALSE);
}
else if ((LOWORD(LParam) != HTCLIENT) && HideCursor)
{
HideCursor = FALSE;
ShowCursor(TRUE);
}
Result = DefWindowProc(Window, Message, WParam, LParam);
break;
}
这很好用,但有点尴尬,因为鼠标光标一进入 window 的客户区就会立即消失。例如,当用户试图将光标移向工具栏按钮或手动调整 window 的大小时,用户很容易忘记鼠标光标 "should be" 的位置。
如何在其中添加一两秒的延迟,以便用户可以将鼠标移到 window 的客户区上,而鼠标不会立即消失,但是如果鼠标光标悬停在 window客户区超过一两秒,就消失了?
当通知您鼠标光标进入 window 时,您可以使用 SetTimer(hWnd, ID_MOUSE_TIMER, 2000, NULL)
,其中 hWnd
是您的 window 句柄,ID_MOUSE_TIMER
是一个定时器的任意标识符,用于创建一个将在 2000 毫秒后触发的定时器。
然后您可以像以前一样回复 WM_TIMER
消息并隐藏光标,还可以使用 KillTimer(hWnd, ID_MOUSE_TIMER)
来防止进一步调用。
当鼠标光标离开您的 window 时,您还应该销毁计时器,如果鼠标光标像之前一样被隐藏,则还应恢复其可见性。
要阅读有关计时器的信息,请查看 MSDN 中相应的 section。
您可以使用 WM_MOUSEHOVER 消息。
我正在用 C 编写 Windows 应用程序。
我通过处理 WM_SETCURSOR
消息将鼠标光标隐藏在 window 的客户区:
case WM_SETCURSOR:
{
static BOOL HideCursor = FALSE;
if ((LOWORD(LParam) == HTCLIENT) && !HideCursor)
{
HideCursor = TRUE;
ShowCursor(FALSE);
}
else if ((LOWORD(LParam) != HTCLIENT) && HideCursor)
{
HideCursor = FALSE;
ShowCursor(TRUE);
}
Result = DefWindowProc(Window, Message, WParam, LParam);
break;
}
这很好用,但有点尴尬,因为鼠标光标一进入 window 的客户区就会立即消失。例如,当用户试图将光标移向工具栏按钮或手动调整 window 的大小时,用户很容易忘记鼠标光标 "should be" 的位置。
如何在其中添加一两秒的延迟,以便用户可以将鼠标移到 window 的客户区上,而鼠标不会立即消失,但是如果鼠标光标悬停在 window客户区超过一两秒,就消失了?
当通知您鼠标光标进入 window 时,您可以使用 SetTimer(hWnd, ID_MOUSE_TIMER, 2000, NULL)
,其中 hWnd
是您的 window 句柄,ID_MOUSE_TIMER
是一个定时器的任意标识符,用于创建一个将在 2000 毫秒后触发的定时器。
然后您可以像以前一样回复 WM_TIMER
消息并隐藏光标,还可以使用 KillTimer(hWnd, ID_MOUSE_TIMER)
来防止进一步调用。
当鼠标光标离开您的 window 时,您还应该销毁计时器,如果鼠标光标像之前一样被隐藏,则还应恢复其可见性。
要阅读有关计时器的信息,请查看 MSDN 中相应的 section。
您可以使用 WM_MOUSEHOVER 消息。