В моем приложении мне нужно обработать событие наведения мыши, чтобы изменить фон кнопки. Используя мастер классов MFC, я не смог найти запись при наведении мыши в списке событий для этого элемента. Я пытался с помощью PreTranslateMessage
, но это не работает. Как я могу справиться с этим событием?
События наведения мыши по умолчанию не генерируются. Вы должны запросить их по телефону TrackMouseEvent с правильно заселенным TRACKMOUSEEVENT структура:
TRACKMOUSEEVENT tme = { 0 };
tme.cbSize = sizeof( tme );
tme.dwFlags = TME_HOVER;
tme.hwndTrack = myButton;
tme.dwHoverTime = myHoverTime; // HOVER_DEFAULT, or the hover timeout in milliseconds.
::TrackMouseEvent( &tme );
Затем система сгенерирует WM_MOUSEHOVER сообщения, если мышь находится над MyButton за myHoverTime миллисекунды.
Так как WM_MOUSEHOVER
сообщение отправляется в окно, в котором запрашиваются сообщения при наведении курсора мыши, вам нужно будет получить пользовательский элемент управления кнопки с соответствующими записями в его карте сообщений. В частности, вам придется использовать ON_WM_MOUSEHOVER()
макрос и реализовать afx_msg void OnMouseHover (UINT, CPoint) (увидеть WM_ Обработчики сообщений: L — M для справки).
Других решений пока нет …