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

How to handle mouse hover event for specific control in Microsoft visual C++ ( MFC )?

本文关键字:悬停 事件 Microsoft visual MFC c++ 鼠标 控件 何处理 处理      更新时间:2023-10-16

在我的应用程序中,我需要处理鼠标悬停事件来改变按钮的背景。使用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 );

如果鼠标停留在myButtonmyHoverTime毫秒,则系统将生成WM_MOUSEHOVER消息。

由于WM_MOUSEHOVER消息被发布到请求鼠标悬停消息的窗口,因此您必须派生一个自定义按钮控件,并在其消息映射中包含适当的条目。特别是,你将不得不使用ON_WM_MOUSEHOVER()宏和实现afx_msg void OnMouseHover(UINT, CPoint)(参见WM_消息处理程序:L - M参考)。