下面以按钮为例阐述:
首先给对话框类添加一个新类:CNewButton类
我们都知道有关鼠标的移动事件通常是WM_MOUSEMOVE,它表示鼠标滑过按钮事件。
但有时我们需要知道鼠标停靠在按钮上的事件和鼠标离开按钮上的事件。只有WM_MOUSEMOVE
是不能满足我们的要求的。我们需要WM_MOUSEHOVER和WM_MOUSELEAVE事件,这两个消息
系统是有定义的。但并不像WM_MOUSEMOVE可以直接用,它需要触发。
我们需要TRACKMOUSEEVENT 这个东东来帮我们:
TRACKMOUSEEVENT tme;
tme.cbSize=sizeof(tme);//确定大小
tme.dwFlags=TME_HOVER|TME_LEAVE;//可以产生的消息组合
tme.dwHoverTime=0;// 鼠标的停靠时间
tme.hwndTrack=m_hWnd;//鼠标关联的窗口
_TrackMouseEvent(&tme);//这个函数可以跟踪鼠标事件
以上这段代码是放在WM_MOUSEMOVE 消息处理函数中的
另外还需要添加消息处理函数的声明,以WM_MOUSEHOVER为例
在新类CNewButton的头文件中添加:
afx_msg void OnMouseHover(WPARAM wParam,LPARAM lParam);
在其源文件中添加:
ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)
void CNewButton::OnMouseHover(WPARAM wParam,LPARAM lParam)
{}
当然上面的跟踪鼠标事件的方法可以应用到其它窗口上去。重绘按钮时就会用到以上的方法