【发布时间】:2018-06-26 19:41:02
【问题描述】:
我正在使用 TrackMouseEvent、WM_MOUSEHOVER 和 WM_MOUSELEAVE 处理鼠标悬停/离开事件。
唯一的问题是,当鼠标悬停在窗口的任何子窗口上时,它会向跟踪鼠标的窗口发送WM_MOUSELEAVE 消息。
我实际上理解为什么 Windows 会这样做,但不知道如何解决它。谷歌搜索对我没有帮助。我相信解决方案非常简单,我只是错过了一些东西。我正在开发 Visual C++ Win32 应用程序。 (无MFC等)
我的代码:
void TrackMouse(HWND hwnd)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER | TME_LEAVE;
tme.dwHoverTime = 1; //How long the mouse has to be in the window to trigger a hover event.
tme.hwndTrack = hwnd;
TrackMouseEvent(&tme);
}
WndProc:
case WM_MOUSEMOVE:
{
if (!isTracking)
{
TrackMouse(hWnd);
isTracking = true;
}
break;
}
case WM_MOUSEHOVER:
ShowWindow(MouseIsOver, TRUE);
break;
case WM_MOUSELEAVE:
ShowWindow(MouseIsOver, FALSE);
isTracking = false;
break;
【问题讨论】:
-
你应该阅读SetCapture和ReleaseCapture