MFC MouseLeave无效解决方案
背景
程序目的:实现在MFC程序中,当鼠标移动到某个窗口上时,其背景颜色为color1,鼠标移开时背景颜色为color2。
在编写程序时,发现ON_WM_MOUSEMOVE
消息对应的函数起作用了,即:鼠标移动到某个窗口上时,背景颜色变为color1; 但是OnMouseLeave函数确没有起作用,即:鼠标移开时,背景颜色没有变为color2。此处前提是更换窗口背景的代码都是正确的。
鼠标消息
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
ON_WM_MOUSEMOVE()
解决方案:需要引入TRACKMOUSEEVENT来做鼠标时间的跟踪
注意:需要在类中引入成员变量:m_bMouseTracking
来进行控制。
void CMyWnd::OnMouseMove( UINT nFlags, CPoint point )
{
if(!m_bMouseTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_LEAVE | TME_HOVER; // 这里同时也跟踪了Hover事件
tme.hwndTrack = m_hWnd;
tme.dwHoverTime = 10;
m_bMouseTracking = _TrackMouseEvent(&tme);
}
// 以下是伪代码:自己根据自己的需要进行扩展
m_crBackColor = color1;
notifyToRepaintWnd();
__super::OnMouseMove(nFlags,point);
}
LRESULT CMyWnd::OnMouseLeave( WPARAM wparam, LPARAM lparam)
{
m_bMouseTracking = FALSE;
// 以下是伪代码:自己根据自己的需要进行扩展
m_crBackColor = color2;
notifyToRepaintWnd();
return TRUE;
}