Вопрос

Ниже приведен мой фильтр сообщений:

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).Почему это происходит?

Это было полезно?

Решение

IMessageFilter.Функция PreFilterMessage() вызывается только для сообщений в очереди сообщений.Сообщения типа WM_CLOSE отправляются непосредственно в WndProc() с помощью SendMessage(), они обходят очередь.Вы также не будете получать сообщения типа WM_ACTIVATE, WM_GETTEXT и т.д.Входные события, вот и все.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top