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?

È stato utile?

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
scroll top