Pregunta

A continuación es mi mensaje de filtro:

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;
}

He comprobado que soy el filtrado de la mayoría de los mensajes sin problema.Sin embargo, yo no estoy recibiendo los mensajes enviados después de la ventana de cierre de clic en el botón (WM_CLOSE, WM_DESTROY, WM_NCDESTROY y WM_QUIT).¿Por qué es esto?

¿Fue útil?

Solución

IMessageFilter.PreFilterMessage () sólo se llama para los mensajes en la cola de mensajes. Mensajes como WM_CLOSE se envían directamente a WndProc () con SendMessage (), evitan la cola. También no recibirá mensajes como WM_ACTIVATE, WM_GETTEXT, etc. Los eventos de entrada, eso es todo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top