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

标签 winapi popup mouseevent mousehover

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

相关文章:

c++ - GetComputerName() 返回空结果

JavaScript 弹出 url

java - 如何设置一个鼠标监听器使得表格只能点击一次?

javascript - Chrome mousedown 和 mouseup 事件不再有效,其他浏览器正常

c++ - 如果给定的 RegisterClassEx() 调用成功一次,我可以假设它永远都是吗?

c - 读取文件访问/修改时间戳

c++ - 如何让 C++ 程序响应文件打开而执行?

javascript - 多显示器/双显示器系统上的 window.open() - 窗口在哪里弹出?

selenium - 如何使用 selenium 接受 SSL 证书?

c# - 创建委托(delegate) MouseEventHandler 的新实例