首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

TRACKMOUSEEVENT //如何有时收到鼠标离开的消息呢

2013-04-26 
TRACKMOUSEEVENT//怎么有时收到鼠标离开的消息呢?OnMouseMove每次都能收到;可是OnMouseLeave自定义消息收

TRACKMOUSEEVENT //怎么有时收到鼠标离开的消息呢?


OnMouseMove每次都能收到;可是OnMouseLeave自定义消息收不到呀
单文档的子对话框!!!是这个原因????
还与系统的鼠标离开消息有什么区别吗????

ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave) 

ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
void CFloatFrm::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(m_Frm.PtInRect(point))
{

//if(m_TimerPopID!=0)
//KillTimer(m_TimerPopID);
//if(m_TimerPopID!=0)
//KillTimer(m_TimerbackID);
//if(m_TimerPopID!=0)
//KillTimer(m_TimerShowID);
}
if (!m_bMouseTracking)   
{  
TRACKMOUSEEVENT   tme;   
tme.cbSize   =   sizeof(tme);   
tme.hwndTrack   =   m_hWnd;   
tme.dwFlags   =   TME_LEAVE ;   
_TrackMouseEvent(&tme);    
m_bMouseTracking = true;
}
CDialog::OnMouseMove(nFlags, point);
}

LRESULT CFloatFrm::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
CPoint point(0,0);
GetCursorPos(&point);

if (!m_Frm.PtInRect(point))
{
                m_dwStartTime = GetTickCount();
//鼠标离开窗口时开始计时,到一定时间后自动隐藏
m_TimerShowID = SetTimer(10);
m_bMouseTracking = false;

}
 return TRUE;
}


[解决办法]
把_TrackMouseEvent的判断条件去掉,每次mousemove时都需要_TrackMouseEvent
[解决办法]
m_bMouseTracking必须初始化为假
OnMouseLeave消息里,必须再次把m_bMouseTracking修改为假
如果要接收WM_MOUSEHOVER消息,TRACKMOUSEEVENT结构必须设置时间 tme.dwHoverTime=10

热点排行