WM_MOUSELEAVE和WM_MOUSEHOVER使用

默认情况下,窗口是不响应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);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值