Pergunta

Abaixo está o meu filtro de mensagens:

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;
}

Eu verifiquei que estou filtrando a maioria das mensagens, sem um problema. No entanto, eu não estou recebendo todas as mensagens expedidas após o botão perto da janela é clicado (WM_CLOSE, WM_DESTROY, WM_NCDESTROY e WM_QUIT). Por que isso?

Foi útil?

Solução

IMessageFilter.PreFilterMessage () é chamado apenas para mensagens na fila de mensagens. Mensagens como WM_CLOSE são enviados directamente para WndProc () com SendMessage (), eles contornam a fila. Você também não terá mensagens como WM_ACTIVATE, WM_GETTEXT, etc. eventos de entrada, que é sobre ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top