TrackMouseEven这里讲两个功能:
1:当鼠标离开指定窗口时触发OnMouseLeave(WPARAM wParam, LPARAM lParam);
2:当鼠标在指定窗口悬停指定时间(毫秒)后触发OnMouseHover(WPARAM wParam, LPARAM lParam);
示例讲解,不罗嗦了:
1:建立一个对话框程序,关联一个类如:CTestTrackMouseEventDlg;
2:添加到
//{{AFX_MSG(CTestTrackMouseEventDlg)
afx_msg void OnMouseLeave(WPARAM wParam = 0, LPARAM lParam = 0);
afx_msg void OnMouseHover(WPARAM wParam = 0, LPARAM lParam = 0);
//}}AFX_MSG
3:
BEGIN_MESSAGE_MAP(CTestTrackMouseEventDlg, CDialog)
//{{AFX_MSG_MAP(CTestTrackMouseEventDlg)
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
4:
void CTestTrackMouseEventDlg::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
//MessageBox("OnMouseLeave");
static int i = 0 ;
CString str; str.Format("OnMouseLeave %d",i++);
SetWindowText( str );
}
void CTestTrackMouseEventDlg::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
//MessageBox("OnMouseHover");
static int i = 0 ;
CString str; str.Format("OnMouseHover %d",i++);
SetWindowText( str );
}
5:
void CTestTrackMouseEventDlg::OnButton1OnMouseLeave() //鼠标离开对话框时,启动触发OnMouseHover;
{
// TODO: Add your control notification handler code here
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.hwndTrack = this->m_hWnd;
tme.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tme);
}
void CTestTrackMouseEventDlg::OnButton2OnMouseHover() //鼠标在对话框悬停是定时间,启动触发OnMouseHover;
{
// TODO: Add your control notification handler code here
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.hwndTrack = this->m_hWnd;
tme.dwFlags = TME_HOVER;
tme.dwHoverTime = 1000;
_TrackMouseEvent(&tme);
}
6://如果将以上两个触发函数添加到OnMouseMove消息函数中就可以实时监测鼠标了,当然不是必须的;
void CTestTrackMouseEventDlg::OnMouseMove(UINT nFlags, CPoint point) //
{
// TODO: Add your message handler code here and/or call default
OnButton1OnMouseLeave();
OnButton2OnMouseHover();
CDialog::OnMouseMove(nFlags, point);
}