Condividi tramite


Gestori per intervalli della mappa messaggi

In questo articolo viene illustrato come eseguire il mapping di un intervallo dei messaggi a una funzione con singolo gestore 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 eseguire il mapping di messaggi a una sola 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 dell'aggiornamento dei comandi.

  • È 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 di voci della mappa messaggi

  • Dichiarazione della funzione di gestione

  • Esempio per un intervallo degli ID di comando

  • Esempio per un intervallo degli ID di controllo

Scrittura di voci della mappa messaggi

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

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

La voce della mappa messaggi è composto dai seguenti elementi:

  • La macro dell'intervallo della mappa messaggi:

  • Parametri alla macro:

    Le prime due macro accetta tre parametri:

    • L'id di comando di inizio dell'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 della 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 normalmente 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 ha 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 nei controlli di gestione del comando zoom nell'esempio HIERSVRMFC. Questo comando nonché la visualizzazione, ridimensionandola tra 25% e 300% della dimensione normale. La classe di visualizzazione HIERSVR utilizza un insieme per gestire i controlli zoom a 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, start 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 di 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 gestori di ON_UPDATE_COMMAND_UI per una serie di controlli e da cercarsi scrittura, oppure copiare, gli stessi codice ripetutamente. La soluzione consiste nell'eseguire il mapping di un intervallo di ID di comandi a una funzione del gestore aggiornamento mediante 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 per specificare che ordinano l'utente ha 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 degli ID di controllo a un unico gestore. Si supponga che l'utente può 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 scrivono la macro di ON_CONTROL_RANGE nella mappa messaggi, specificare:

  • Un messaggio di notifica di controllo specifico.

    Di seguito è riportato BN_CLICKED.

  • I valori ID controllo associati all'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 nel seguente:

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 è tipico: la conversione del valore viene passato a int nell'intervallo e dell'asserzione del messaggio che questo caso. È quindi possibile intraprendere azioni differenti a seconda del pulsante selezionato.

Vedere anche

Concetti

Dichiarazioni di funzioni gestore messaggi