我对WM_MOUSEMOVE的看法是什么?

时间:2012-11-29 16:42:14

标签: c++ windows winapi mouse

我要做的很简单,如果移动没有移动或点击,我想在1秒后隐藏鼠标光标。

我搜索并看到有人建议使用WM_MOUSEMOVE。但是,在我的应用程序中,WM_MOUSEMOVE只是检测鼠标是否在客户端区域。如果是,则应用程序会不断收到WM_MOUSEMOVE。我已阅读MSDN页面,但我仍感到困惑。

2 个答案:

答案 0 :(得分:1)

使用WM_SETCURSOR。

使用WM_SETCURSOR进行与游标相关的工作。此消息是为此目的而生成的。您提到的客户区建议您可能还需要使用SetCapture API。

另一种方式(或更现代的做法)是使用TrackMouseEvent。它提供了WM_MOUSEHOVER

答案 1 :(得分:0)

建议是正确的。您需要做的是定义一个计时器(例如,一个触发WM_TIMER消息的计时器)。 您可以在第一次鼠标移动(WM_MOUSEMOVE)中激活它。如果在为计时器定义的时间间隔内不会发生鼠标移动,则会触发WM_TIMER事件,然后您可以隐藏鼠标。

每次WM_MOUSEMOVE事件触发时,您只需重新启动计时器(使用其专用API)。因此,WM_MOUSEMONVE事件会阻止计时器到期。如果WM_MOUSEMOVE停止到达(因为你不再移动鼠标),计时器将在没有中断的情况下打勾,直到它过去并触发。