我要做的很简单,如果移动不移动或单击,我想在 1 秒后隐藏鼠标光标。
我搜索并看到有人推荐使用 WM_MOUSEMOVE。然而,在我的应用程序中,WM_MOUSEMOVE 只是检测鼠标是否在客户区。如果是,则应用程序会不断收到 WM_MOUSEMOVE。我已经阅读了 MSDN 页面,但我仍然感到困惑。
使用 WM_SETCURSOR。
将 WM_SETCURSOR 用于与游标相关的工作。此消息是为此目的而发出的。您提到客户区表明您可能还需要使用SetCapture
API。
另一种方式(或更现代的做法)是使用TrackMouseEvent
. 它提供WM_MOUSEHOVER。
建议是正确的。您需要做的是定义一个计时器(例如,触发 WM_TIMER 消息的计时器)。您在第一次鼠标移动 (WM_MOUSEMOVE) 中激活它。如果在您为计时器定义的时间间隔内没有发生鼠标移动,则将触发 WM_TIMER 事件,然后您可以隐藏鼠标。
每次 WM_MOUSEMOVE 事件触发时,您只需重新启动计时器(使用其专用 API)。这样 WM_MOUSEMONVE 事件可以防止计时器到期。如果 WM_MOUSEMOVE 停止到达(因为您不再移动鼠标),计时器将在没有中断的情况下滴答作响,直到它结束并触发。