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);
}
所以需要调用
::_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);
}
相关文章推荐
- WM_MOUSELEAVE和WM_MOUSEHOVER使用
- 使用_TrackMouseEvent捕获WM_MOUSELEAVE和WM_MOUSEHOVER消息
- WM_MOUSELEAVE和WM_MOUSEHOVER使用
- WM_MOUSELEAVE 和 WM_MOUSEHOVER 使用
- 使用_TrackMouseEvent捕获WM_MOUSELEAVE和WM_MOUSEHOVER消息
- 关于MFC中WM_MOUSEHOVER和WM_MOUSELEAVE消息的使用
- 使用_TrackMouseEvent捕获WM_MOUSELEAVE和WM_MOUSEHOVER消息
- 使用_TrackMouseEvent捕获WM_MOUSELEAVE和WM_MOUSEHOVER消息
- 编辑框的WM_MOUSELEAVE和WM_MOUSEHOVER使用
- 关于MFC中WM_MOUSEHOVER和WM_MOUSELEAVE消息的使用
- WM_MOUSELEAVE和WM_MOUSEHOVER使用
- WM_MOUSELEAVE和WM_MOUSEHOVER使用
- 用MFC自绘按钮,处理的消息包括WM_MOUSEHOVER、WM_MOUSELEAVE、WM_LBUTTONDOWN
- OnMouseHover()和OnMouseLeave()(让窗口捕获并响应WM_MOUSEHOVER和WM_MOUSELEAVE消息)
- 关于WM_MOUSEHOVER和WM_MOUSELEAVE消息的用法以及按钮的变色问题!
- 捕捉鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息
- WM_MOUSEHOVER和WM_MOUSELEAVE消息的触发
- ShowCursor、MouseHover、MouseLeave使用与MFC框架理解
- WM_MOUSELEAVE和WM_MOUSEHOVER消息
- _TrackMouseEvent 响应 WM_MOUSELEAVE 和 WM_MOUSEHOVER 消息