WM_DESTROY, WM_CLOSE contournant IMessageFilter
-
21-08-2019 - |
Question
Ci-dessous mon filtre de message:
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;
}
Je vérifiais que je filtrage la plupart des messages sans problème. Cependant, je ne reçois pas de message envoyés après le bouton de fermeture de la fenêtre est cliqué (WM_CLOSE
, WM_DESTROY
, et WM_NCDESTROY
WM_QUIT
). Pourquoi est-ce?
La solution
IMessageFilter.PreFilterMessage () est appelée uniquement pour les messages dans la file d'attente de messages. Des messages comme WM_CLOSE sont envoyés directement à WndProc () avec SendMessage (), ils contournent la file d'attente. Vous pourrez également ne pas recevoir des messages comme WM_ACTIVATE, WM_GETTEXT, etc. événements d'entrée, qui est à ce sujet.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow