您的位置:首页 > 其它

WM_MOUSELEAVE和WM_MOUSEHOVER使用

2015-03-10 15:42 267 查看
默认情况下,窗口是不响应WM_MOUSEHOVER 和 WM_MOUSELEAVE (这个消息上次测试是默认下也响应的)消息的。

所以需要调用
::_TrackMouseEvent  函数来激活这两个消息。

 WM_MOUSEHOVER 是调用::_TrackMouseEvent (当次设置后有效) 当鼠标在指定的窗口上停留超过一定时间后;

WM_MOUSELEAVE 是鼠标离开指定窗口后 ,

该函数Post 这两个消息到指定窗口.

 使用详解 : 

 typedef struct tagTRACKMOUSEEVENT{

   DWORD cbSize ; // 结构体大小

   DWORD swFlags ; //定义服务请求 可以下 下面组合 : TME_CANCEL 是取消前一次的跟踪请求 如 TME_CANCEL | TME_HOVER ,

                                       TME_HOVER 是当鼠标停留在指定的窗口上面做出响应 , 

                                       TME_LEAVE 是当鼠标离开指定的窗口做出的响应 ,等等

   HWND  hwndTrack ; // 待跟踪的窗口句柄;

  DWORD dwHoverTime ; //定义hover 时间的耗尽时间(如果在dwFlags 中有TME_HOVER ),单位毫秒 ;

  } TRACKMOUSEEVENT , *LPTRAKMOUSEEVENT;

 

  在OnMouseMove () 中设置响应 :

void CSuperButton::OnMouseMove(UINT nFlags, CPoint point)

{
// TODO: 在此添加消息处理程序代码和/或调用默认值

    //MessageBox(L"MouseMove in this Button");

     
TRACKMOUSEEVENT csTME;
csTME.cbSize = sizeof(csTME);
csTME.dwFlags = TME_HOVER;
csTME.hwndTrack = m_hWnd;
csTME.dwHoverTime = 2000;
::_TrackMouseEvent(&csTME);
//m_bMouseTrack = FALSE;

CButton::OnMouseMove(nFlags, point);

}

在OnMouseHover () 中响应 :

void CSuperButton::OnMouseHover(UINT nFlags, CPoint point)

{
// TODO: 在此添加消息处理程序代码和/或调用默认值
MessageBox(_T("MouseHover"));

        //再次设计WM_HOVER 消息响应

TRACKMOUSEEVENT csTME;
csTME.cbSize = sizeof(csTME);
csTME.dwFlags = TME_HOVER;
csTME.hwndTrack = m_hWnd;
csTME.dwHoverTime = 2000;
::_TrackMouseEvent(&csTME);

CButton::OnMouseHover(nFlags, point);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: