我是 WIN32 API 的新手,下面显示的代码有问题,该代码来 self 的 WinProc 函数: 当鼠标光标在我的窗口中停留一段时间时,我将 TrackMouseEvent 与 TME_HOVER 一起使用以获取 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;
最佳答案
对了,我还发现我想做的事用windows TOOLTIPS_CLASS也可以做。
我为此找到的最值得推荐的链接是:
http://winapi.foosyerdoos.org.uk/info/common_cntrls.php#CreateTooltip
https://github.com/wine-mirror/wine/blob/master/dlls/comctl32/tooltips.c
关于winapi - WIN32 API 中 WM_MOUSEHOVER 上的 POPUP 窗口 - 如何关闭它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27272944/