WM_DESTROY, WM_CLOSE bypassando IMessageFilter
-
21-08-2019 - |
Domanda
Di seguito è il mio filtro dei messaggi:
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;
}
ho verificato che sto filtraggio maggior parte dei messaggi senza un problema. Tuttavia, Non si ricevono gli eventuali messaggi spediti dopo pulsante di chiusura della finestra viene cliccato (WM_CLOSE
, WM_DESTROY
, WM_NCDESTROY
e WM_QUIT
). Perché questo?
Soluzione
IMessageFilter.PreFilterMessage () viene chiamato solo per i messaggi nella coda di messaggi. I messaggi come WM_CLOSE vengono inviati direttamente al WndProc () con SendMessage (), bypassare la coda. Inoltre, non sarà possibile ottenere i messaggi come WM_ACTIVATE, WM_GETTEXT, ecc eventi di input, che su di esso.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow