1

以下是我的消息过滤器:

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_NCDESTROYWM_QUIT

4

1 回答 1

7

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

于 2009-03-24T19:11:48.600 回答