本文共 1020 字,大约阅读时间需要 3 分钟。
思路:其实windows是有WM_MOUSELEAVE(鼠标离开)和WM_MOUSEHOVER(鼠标进入)消息的,不过它们需要我们手动来打开才可以使用
下面我要实现每次鼠标移入窗口调用OnMouseHover函数,每次鼠标移出窗口调用OnMouseLeave函数
bool m_bTracking;
afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg LRESULT OnMouseLeave(WPARAM, LPARAM);afx_msg LRESULT OnMouseHover(WPARAM, LPARAM);
BEGIN_MESSAGE_MAP(CThreadDlg, CDialog) ON_WM_MOUSEMOVE() ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave) ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)END_MESSAGE_MAP()
void CThreadDlg::OnMouseMove(UINT nFlags, CPoint point){ if (!m_bTracking) { //打开鼠标进入与离开的消息监听 TRACKMOUSEEVENT tme; tme.cbSize = sizeof(tme); tme.hwndTrack = m_hWnd; tme.dwFlags = TME_LEAVE | TME_HOVER; tme.dwHoverTime = 1; m_bTracking = _TrackMouseEvent(&tme); } CDialog::OnMouseMove(nFlags, point);}
LRESULT CThreadDlg::OnMouseLeave(WPARAM wParam,LPARAM lParam){ m_bTracking = false;//每次进入重新打开,否则还是不会监听的 return 1;} LRESULT CThreadDlg::OnMouseHover(WPARAM wParam,LPARAM lParam){ return 1;}
转载地址:http://zbxui.baihongyu.com/