代码之家  ›  专栏  ›  技术社区  ›  Agnel Kurian

WM_DESTROY、WM_CLOSE绕过IMessageFilter

  •  1
  • Agnel Kurian  · 技术社区  · 16 年前

    下面是我的邮件过滤器:

    bool MyFilter::PreFilterMessage(Message %m){
        switch(m.Msg){
        case WM_CLOSE:
        case WM_DESTROY:
        case WM_NCDESTROY:
        case WM_QUIT:
            Debug::WriteLine(L"Gone!");
            break;
        case WM_MOUSEMOVE:
            Debug::WriteLine(L"A mouse! Catch! Catch!!! CATCH!!");
            break;
        }
        return false;
    }
    

    我验证了我过滤大多数邮件都没有问题。但是,单击窗口的关闭按钮后,我没有收到任何发送的消息( WM_CLOSE , WM_DESTROY , WM_NCDESTROY WM_QUIT

    1 回复  |  直到 16 年前
        1
  •  7
  •   Hans Passant    16 年前

    IMessageFilter。PreFilterMessage()仅对消息队列中的消息调用。像WM_CLOSE这样的消息通过SendMessage()直接发送到WndProc(),它们绕过了队列。您也不会收到WM_ACTIVATE、WM_GETTEXT等消息。输入事件,仅此而已。

    推荐文章