下面是我的消息过滤器:

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)之后调度的任何消息。这是为什么?

有帮助吗?

解决方案

IMessageFilter.PreFilterMessage()只要求在消息队列中的消息。像WM_CLOSE消息被直接发送到的WndProc()用的SendMessage(),它们绕过队列。你也不会得到的消息像WM_ACTIVATE,WM_GETTEXT等输入事件,仅此而已。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top