读书人

怎么得知当前鼠标已经不在窗口内

发布时间: 2012-03-04 11:13:33 作者: rapoo

如何得知当前鼠标已经不在窗口内?
在单文档程序中,当鼠标移出文档区域时,如何得知该信息? 比如移了滑动条上或工具条上?

请各位大侠多多指教!!!

[解决办法]
响应WM_MOUSELEAVE消息,这个classwizard不支持,要手动加入。在头文件加入消息响应函数的声明和监控变量
BOOL m_bMouseTracking;//在构造函数中将其初始化为FASLE
afx_msg LRESULT OnMouseLeave(WPARAM wParam,LPARAM lParam);

在源文件中加入消息映射
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)

加入WM_MOUSEMOVE消息响应,然后在OnMouseMove函数中加入鼠标事件监视器,如下
if(!m_bMouseTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize=sizeof(TRACKMOUSEEVENT);
//监控鼠标离开
tme.dwFlags=TME_LEAVE;
tme.hwndTrack=this-> m_hWnd;
if(::_TrackMouseEvent(&tme))
{
m_bMouseTracking=TRUE;
}
}

最后加入WM_MOUSELEAVE的消息响应函数定义即可
LRESULT CXXXX::OnMouseLeave(WPARAM wParam,LPARAM lParam)
{
m_bMouseTracking=FALSE;
///////////something when mouse leave/////////////////

return TRUE;
}

读书人网 >VC/MFC

热点推荐