case WM_MOUSEHOVER:
{
bMouseTracking = false;
// do sth
break;
}
case WM_MOUSEMOVE:
{
if(!bMouseTracking)
{
TRACKMOUSEEVENT tme = { 0 };
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER | TME_LEAVE;
tme.hwndTrack = hWndTracking;
tme.dwHoverTime = 1000UL;
bMouseTracking = true;
_TrackMouseEvent(&tme);
bMouseTracking = true;
}
// do sth
break;
}当程序中调用了TrackMouseEvent函数之后,在调用TrackMouseEvent时指定的时间里,鼠标盘旋在窗口的客户区,则产生WM_MOUSEHOVER消息。在处理该消息时,MouseTracking一般会停止。如果需要继续跟踪,则应当再次调用TrackMouseEvent。
当程序中调用了TrackMouseEvent函数之后,在调用TrackMouseEvent时指定的时间里,在鼠标离开调用TrackMouseEvent时指定的窗口客户区时,会则产生WM_MOUSELEAVE消息。在处理该消息时,MouseTracking一般会停止。如果需要继续跟踪,则应当再次调用TrackMouseEvent。
本文详细解释了WM_MOUSEHOVER消息及其在处理鼠标悬停操作时的使用,包括如何通过TrackMouseEvent函数实现对窗口客户区的跟踪。讨论了在不同时间段内鼠标行为对消息的影响及相应消息(WM_MOUSEHOVER, WM_MOUSELEAVE)的产生,并提供了关键代码片段以辅助理解。
403

被折叠的 条评论
为什么被折叠?



