【发布时间】:2014-12-03 13:27:59
【问题描述】:
我是 WIN32 API 的新手,下面显示的代码有问题,这是来自我的 WinProc 函数:当鼠标光标在我的窗口中停留一段时间时,我使用带有 TME_HOVER 的 TrackMouseEvent 来获取 WM_MOUSEHOVER。如果我在每个 WM_MOUSEMOVE 上调用 TrackMouseEvent,这可行,但如果我只在其他地方调用一次,则不行。为什么? (这是第一个问题)
当我收到 WM_MOUSEHOVER 时,我创建了一个可以看到的 POPUP 窗口,然后再次为 TME_LEAVE 调用 TrackMouseEvent。这有效,当鼠标光标离开我的窗口时我收到 WM_MOUSELEAVE,然后我想隐藏并销毁弹出窗口(我存储在静态变量中的 HWND)但这不起作用,弹出窗口留在那里。为什么? (这是第二个问题)
谁能给我一个示例或链接到一个显示 TrackMouseEvent 和 PopUp 窗口的简单示例?非常感谢。
case WM_MOUSEMOVE:
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER;
tme.hwndTrack = hSBox;
TrackMouseEvent(&tme);
}
break;
case WM_MOUSEHOVER:
{
hPop = CreateWindowEx(WS_EX_STATICEDGE, //WS_EX_CLIENTEDGE,
TEXT("STATIC"),
TEXT("pop-up"),
WS_POPUP | WS_BORDER,
100, 100, 100, 100,
hWnd, (HMENU)0, hInstance, NULL);
ShowWindow(hPop, SW_SHOW);
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_LEAVE;
tme.hwndTrack = hSBox;
TrackMouseEvent(&tme);
}
return 0;
case WM_MOUSELEAVE:
{
ShowWindow(hPop, SW_HIDE);
DestroyWindow(hPop);
}
return 0;
【问题讨论】:
-
为什么不只创建一次窗口,并在悬停时显示/在离开时隐藏?
-
有趣的反对意见,我猜这意味着使用 TOOLTIPS_CLASS?尽管如此,使用此处显示的代码,您可能对显示的文本有更多的控制权,并且可以更好地改变它吗?我不知道。
-
好吧,更好的说法是,你的评论显然是正确的。
标签: winapi popup mouseevent mousehover