WM_DESTROY,WM_CLOSE绕过IMessageFilter

时间:2009-03-24 12:52:55

标签: .net windows winforms message-queue imessagefilter

以下是我的消息过滤器:

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_CLOSEWM_DESTROYWM_NCDESTROYWM_QUIT)后,我没有收到任何已分派的消息。这是为什么?

1 个答案:

答案 0 :(得分:6)

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