Что я упустил в WM_MOUSEMOVE?

То, что я собираюсь сделать, очень просто, я хочу скрыть курсор мыши через 1 секунду, если движение не двигается или не щелкает.

Я искал и видел, что кто-то рекомендует использовать WM_MOUSEMOVE. Однако в моем приложении WM_MOUSEMOVE просто определяет, находится ли мышь в клиентской области. Если это так, приложение получает WM_MOUSEMOVE постоянно. Я прочитал страницу MSDN, но я все еще в замешательстве.

-2

Решение

Используйте WM_SETCURSOR.

Используйте WM_SETCURSOR для работ, связанных с курсором. Это сообщение сделано для этой цели. Ваше упоминание клиентской области говорит о том, что вам, вероятно, нужно использовать SetCapture API тоже.

Другой способ (или более современный способ) использует TrackMouseEvent, Это обеспечивает WM_MOUSEHOVER.

1

Другие решения

Рекомендация верна. Что вам нужно сделать, это определить таймер (например, тот, который запускает сообщение WM_TIMER).
Вы активируете его первым движением мыши (WM_MOUSEMOVE). Если движение мыши не произойдет в течение интервала, который вы определили для таймера, событие WM_TIMER сработает, и вы сможете затем скрыть мышь.

Каждый раз, когда происходит событие WM_MOUSEMOVE, вы просто перезапускаете таймер (используя его выделенный API). Так что события WM_MOUSEMONVE препятствуют истечению таймера. Если WM_MOUSEMOVE перестанет прибывать (потому что вы больше не двигаете мышь), таймер будет работать без прерываний, пока не истечет и не сработает.

0

По вопросам рекламы [email protected]