WM_DESTROY, WM_CLOSE ignorando IMessageFilter
-
21-08-2019 - |
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?
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