سؤال

وفيما يلي بلدي مرشح الرسالة:

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، الخ أحداث الإدخال، ذلك حول هذا الموضوع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top