我正在用C语言编写Windows应用程序。
我通过处理WM_SETCURSOR
消息将鼠标光标隐藏在窗口的客户区域中:
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;
}
这很好用,但它有点尴尬,因为鼠标光标一进入窗口的客户区就会立即消失。用户很容易忘记鼠标光标所在的位置"例如,当他或她试图将光标移向工具栏按钮,或手动调整窗口大小时。
如何在那里添加一个或两个延迟,以便用户可以将鼠标移动到窗口的客户区域而鼠标不会立即消失,但是如果鼠标光标在客户区域中悬停的时间超过了它会消失吗?
答案 0 :(得分:5)
当您收到鼠标光标进入窗口的通知时,您可以使用SetTimer(hWnd, ID_MOUSE_TIMER, 2000, NULL)
其中hWnd
是您的窗口句柄而ID_MOUSE_TIMER
是计时器的任意标识符,以创建计时器将在2000毫秒后触发。
然后,您可以像以前一样回复WM_TIMER
消息并隐藏光标,但也可以使用KillTimer(hWnd, ID_MOUSE_TIMER)
来阻止进一步调用。
当鼠标光标离开你的窗口时,你也应该销毁定时器,并且如果它像之前一样被隐藏,还可以恢复鼠标光标的可见性。
要阅读计时器,请检查MSDN中的相应section。
答案 1 :(得分:2)
您可以使用WM_MOUSEHOVER消息。