Condividi tramite


Gestori per gli intervalli della mappa messaggi

In questo articolo viene illustrato come eseguire il mapping di un intervallo dei messaggi a una sola funzione del gestore dei messaggi (anziché messaggio del mapping di uno solo a una funzione.

È talvolta necessario elaborare più di un messaggio o notifica di controllo esattamente allo stesso modo.In tali casi, può essere opportuno eseguire il mapping di tutti i messaggi a una singola funzione di gestione.Gli intervalli della mappa messaggi consentono di eseguire questa operazione per un intervallo contiguo dei messaggi:

  • È possibile eseguire il mapping degli intervalli di ID di comandi:

    • Una funzione del gestore comando.

    • Una funzione del gestore aggiornamento del comando.

  • È possibile eseguire il mapping dei messaggi di notifica di controllo per un intervallo degli ID di controllo a una funzione del gestore dei messaggi.

Gli argomenti trattati in questo articolo sono:

  • Scrittura della voce della mappa messaggi

  • Dichiarazione di funzione di gestione

  • Esempio per un intervallo degli ID di comando

  • Esempio per un intervallo degli ID di controllo

Scrittura della voce della mappa messaggi

Nel file di .CPP, aggiungere la voce della mappa messaggi, come illustrato nell'esempio seguente:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

La voce della mappa messaggi è costituito dai seguenti elementi:

  • La macro l'intervallo della mappa messaggi:

  • Parametri alla macro:

    Le prime due macro accetta tre parametri:

    • L'ID di comando che avvia l'intervallo

    • L'ID di comando che termina l'intervallo

    • Il nome della funzione del gestore dei messaggi

    L'intervallo degli ID di comando deve essere contiguo.

    La terza macro, ON_CONTROL_RANGE, accetta un primo parametro aggiuntivo: un messaggio di notifica del controllo, come EN_CHANGE.

Dichiarazione di funzione di gestione

Aggiungere la dichiarazione di funzione di gestione in. File H.Nel codice seguente viene illustrato come questo può apparire, come illustrato di seguito:

public:
   afx_msg void OnDoSomething(UINT nID);

Le funzioni di gestione dei singoli controlli in genere non accettano parametri.Ad eccezione delle funzioni del gestore aggiornamento, le funzioni di gestione degli intervalli della mappa messaggi richiedono un parametro aggiuntivo, nID, di tipo UINT.Questo parametro è il primo parametro.Il parametro aggiuntivo appropriata l'ID di comando aggiuntivo necessario per specificare che ordinano l'utente effettivamente scelto.

Per ulteriori informazioni sui requisiti di parametro per aggiornare le funzioni di gestione, vedere Esempio per un intervallo degli ID di comando.

Esempio per un intervallo degli ID di comando

Quando è possibile utilizzare gli intervalli?Un esempio è rappresentato dai comandi di gestione del comando dello zoom nell'esempio HIERSVRMFC.Questo comando ottimizza la visualizzazione, ridimensionandola tra 25% e 300% della dimensione normale.La classe di visualizzazione HIERSVR utilizza un intervallo per gestire i controlli dello zoom con una voce della mappa messaggi simile alla seguente:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

Quando si scrivono la voce della mappa messaggi, specificare:

  • Due ID di comando, inizio e estremità un intervallo contiguo.

    Di seguito sono ID_VIEW_ZOOM25 e ID_VIEW_ZOOM300.

  • Il nome della funzione di gestione per i controlli.

    Di seguito è riportato OnZoom.

La dichiarazione della funzione sarà simile alla seguente:

public:
   afx_msg void OnZoom(UINT nID);

Il caso delle funzioni del gestore aggiornamento è simile e facile essere più largamente utile.È piuttosto comune da scrivere i gestori di ON_UPDATE_COMMAND_UI per una serie di controlli e da cercarsi scrittura, oppure copiando, gli stessi codice ripetutamente.La soluzione consiste nell'eseguire il mapping di un intervallo di ID di comandi a una funzione del gestore aggiornamento utilizzando la macro di ON_UPDATE_COMMAND_UI_RANGE .ID di comandi è necessario formare un intervallo contiguo.Per un esempio, vedere il gestore di OnUpdateZoom e la relativa voce della mappa messaggi di ON_UPDATE_COMMAND_UI_RANGE nella classe di visualizzazione dell'esempio HIERSVR.

Le funzioni del gestore aggiornamento per i singoli controlli in genere accetta un singolo parametro, pCmdUI, di tipo CCmdUI*.A differenza delle funzioni di gestione, le funzioni del gestore aggiornamento per gli intervalli della mappa messaggi non richiedono un parametro aggiuntivo, nID, di tipo UINT.L'ID di comando, necessario specificare che ordinano l'utente effettivamente scelto, viene trovato nell'oggetto di CCmdUI .

Esempio per un intervallo degli ID di controllo

Un altro caso interessante esegue il mapping dei messaggi di notifica di controllo per un intervallo di ID del controllo a un unico gestore.Si supponga che l'utente possa fare clic su uno di 10 pulsanti.Per eseguire il mapping di tutti e 10 pulsanti a un gestore, la voce della mappa messaggi sarà simile alla seguente:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)    

Quando si scrive una macro di ON_CONTROL_RANGE nella mappa dei messaggi, specificare:

  • Un messaggio di notifica del controllo.

    Di seguito è riportato BN_CLICKED.

  • ID del controllo stima associato con l'intervallo contiguo dei comandi.

    Di seguito sono IDC_BUTTON1 e IDC_BUTTON10.

  • Il nome della funzione del gestore dei messaggi.

    Di seguito è riportato OnButtonClicked.

Quando si scrivono la funzione di gestione, specificare il parametro aggiuntivo di UINT , come illustrato di seguito:

void CRangesView::OnButtonClicked( UINT nID )
{
    int nButton = nID - IDC_BUTTON1;
    ASSERT( nButton >= 0 && nButton < 10 );
    // ...
}

Il gestore di OnButtonClicked per un singolo messaggio di BN_CLICKED non accetta parametri.Lo stesso gestore per un intervallo dei pulsanti accetta un UINT.Il parametro aggiuntivo consente di identificare il controllo particolare responsabile della generazione del messaggio di BN_CLICKED .

Il codice illustrato nell'esempio è normale: convertire il valore viene passato a int nell'intervallo e di affermazione di messaggi che questo caso.È quindi possibile intraprendere azioni differenti a seconda del pulsante è stato fatto clic.

Vedere anche

Concetti

Dichiarare le funzioni di gestore messaggi