【问题标题】:How to detect mouse cursor is outside a windows?如何检测鼠标光标在窗口之外?
【发布时间】:2021-09-02 08:56:32
【问题描述】:

我编写了一个代码,当用户在我的主应用程序窗口中单击时,它会动态创建一个POPUP 样式窗口。现在我希望POPUP 窗口在鼠标光标离开 POPUP wnd 区域时自动销毁。我知道我可能已经处理了WM_MOUSEMOVE 消息,但是该怎么做呢?如果可以的话,请提供一个简单的代码...

【问题讨论】:

  • 我想WM_MOUSELEAVE 会更容易吗?
  • 确实,您需要处理WM_MOUSELEAVE 消息。 WM_MOUSEMOVE 有助于检测鼠标光标何时进入窗口。

标签: c++ windows winapi visual-c++


【解决方案1】:

请改用WM_MOUSELEAVE 消息。但是请注意,此消息必须通过TrackMouseEvent() 明确请求,您的窗口在收到第一条WM_MOUSEMOVE 消息时可以调用该消息。

【讨论】:

    【解决方案2】:

    正如@Remy Lebeau 所说,以下是代码实现。

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static BOOL Tracing = FALSE;
        switch (message)
        {
        case WM_MOUSELEAVE:
        {
            DestroyWindow(hWnd);
            break;
        }
        case WM_MOUSEMOVE:
        {
            if (!Tracing)
            {
                Tracing = TRUE;
    
                TRACKMOUSEEVENT tme{};
                tme.cbSize = sizeof(TRACKMOUSEEVENT);
                tme.dwFlags = TME_LEAVE;
                tme.hwndTrack = hWnd;
    
                TrackMouseEvent(&tme);
            }
            break;
        }
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 2011-07-15
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多