新手,菜鸟~~希望指导一下。先贴代码:
void CMTWindow::OnMouseHover(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
TRACE( _T( "Mouse Hover\n")); TRACKMOUSEEVENT tme;
tme.cbSize =sizeof( tme);
tme.dwFlags =TME_LEAVE;
tme.dwHoverTime = HOVER_DEFAULT;
tme.hwndTrack =m_hWnd;
// ::TrackMouseEvent( &tme); CWnd::OnMouseHover(nFlags, point);
}我看书上说,Hover消息被触发之后停止追踪鼠标,如果要追踪的话需要重新call一下TraceMosueEvent。
但我运行上述代码时,即使去掉TrackMouseEvent(&tme),鼠标照常被追踪,表现为当我移动鼠标时,mouse enter或者mouse leave继续被触发。请问这是怎么回事啊?谢谢!

解决方案 »

  1.   

    Hover tracking stops when WM_MOUSEHOVER is generated. The application must call TrackMouseEvent again if it requires further tracking of mouse hover behavior.
    注意看以上MSDN原文说明,WM_MOUSEHOVER消息触发后,只是停止跟踪鼠标停留,当鼠标离开前一次调用TrackMouseEvent函数所设定的窗口的客户区时仍然会发送mouse leave。
    也就是说mouse leave消息还会被触发一次。如果需要进一步跟踪,必须在鼠标重新进入窗口里再次调用TrackMouseEvent函数。