C++ 如何在Microsoft visual C+中处理特定控件的鼠标悬停事件+;(MFC)?

C++ 如何在Microsoft visual C+中处理特定控件的鼠标悬停事件+;(MFC)?,c++,mfc,hover,mouseevent,C++,Mfc,Hover,Mouseevent,在我的应用程序中,我需要处理鼠标悬停事件来更改按钮的背景。使用MFC类向导,我在该项目的事件列表中找不到鼠标悬停项。我试着使用预翻译消息,但不起作用。如何处理该事件?默认情况下不会生成鼠标悬停事件。您必须通过使用正确填充的: 如果鼠标在myButton上停留myHoverTime毫秒,系统将生成消息 由于WM_MOUSEHOVER消息被发布到请求鼠标悬停消息的窗口,因此您必须派生一个自定义按钮控件,并在其消息映射中包含相应的条目。特别是,您必须在WM\u MOUSEHOVER()上使用宏并实现(

在我的应用程序中,我需要处理鼠标悬停事件来更改按钮的背景。使用MFC类向导,我在该项目的事件列表中找不到鼠标悬停项。我试着使用
预翻译消息
,但不起作用。如何处理该事件?

默认情况下不会生成鼠标悬停事件。您必须通过使用正确填充的:

如果鼠标在myButton上停留myHoverTime毫秒,系统将生成消息

由于
WM_MOUSEHOVER
消息被发布到请求鼠标悬停消息的窗口,因此您必须派生一个自定义按钮控件,并在其消息映射中包含相应的条目。特别是,您必须在WM\u MOUSEHOVER()上使用
宏并实现(请参阅以供参考)。

使用TrackMouseEvent()-在WM\u MOUSEMOVE上开始跟踪,在鼠标离开时停止(WM\u MOUSELEAVE)。要接收鼠标移动,无需调用TrackMouseEvent()。为了老鼠的离开,你将是。在开始跟踪时指定TME_LEAVE(这将确保获得WM_MOUSELEAVE事件),然后在鼠标离开处理程序中使用TME_CANCEL停止跟踪。看见
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 );