WM_DESTROY، WM_CLOSE تجاوز IMessageFilter
-
21-08-2019 - |
سؤال
وفيما يلي بلدي مرشح الرسالة:
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، الخ أحداث الإدخال، ذلك حول هذا الموضوع.
لا تنتمي إلى StackOverflow