gpt4 book ai didi

winapi - WIN32 API 中 WM_MOUSEHOVER 上的 POPUP 窗口 - 如何关闭它?

转载 作者:行者123 更新时间:2023-12-04 12:52:17 26 4
gpt4 key购买 nike

我是 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

Unicode tooltips not showing up

关于winapi - WIN32 API 中 WM_MOUSEHOVER 上的 POPUP 窗口 - 如何关闭它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27272944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com