Freigeben über


Handler für Meldungszuordnungsbereiche

Dieser Artikel wird beschrieben, wie ein Bereich von Meldungen zu einer einzelnen Meldungshandlerfunktion zuordnet (anstelle der Meldung der Zuordnung eine nur eine Funktion).

Manchmal, als Sie mehr als eine Meldung oder Steuerelementbenachrichtigung genauso genau verarbeiten müssen. So einen Situationen möchten Sie möglicherweise alle Nachrichten zu einer einzelnen Handlerfunktion zuordnen. Meldungszuordnungsbereiche ermöglichen, um dies für einen zusammenhängenden Bereich von Meldungen zu tun:

  • Sie können Bereiche von Befehls-IDs zuordnen:

    • Eine Befehlshandlerfunktion.

    • Eine Befehlsaktualisierungshandlerfunktion.

  • Steuerelement-Benachrichtigungen Sie können für einen Bereich von Steuerelement-IDs zu einer Meldungshandlerfunktion zuordnen.

Themen beschrieben in diesem Artikeleinschließung:

  • Schreiben des Meldungszuordnungseintrags

  • Deklarieren der Handlerfunktion

  • Beispiel für einen Bereich von Befehls-IDs

  • Beispiel für einen Bereich von Steuerelement-IDs

Schreiben des Meldungszuordnungseintrags

in der CPP-Datei fügen Sie den Eintrag in der Meldungszuordnung, wie im folgenden Beispiel gezeigt:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

Der Eintrag in der Meldungszuordnung umfasst folgende Elemente:

  • Das Meldungszuordnungsbereichsmakro:

  • Parameter dem Makro:

    Die ersten beiden Makros verwenden drei Parameter:

    • Die Befehls-ID, die den Bereich beginnt

    • Die Befehls-ID, die den Bereich beendet

    • Der Name der Meldungshandlerfunktion

    Der Bereich von Befehls-IDs müssen zusammenhängend sein.

    Das dritte Makro, ON_CONTROL_RANGE, verwendet einen zusätzlichen ersten Parameter: eine Steuerelement-Benachrichtigung, wie EN_CHANGE.

Deklarieren der Handlerfunktion

Fügen Sie der Handlerfunktionsdeklaration in hinzu. Headerdatei. Der folgende Code zeigt, wie dieser potenziell aussehen, wie unten an:

public:
   afx_msg void OnDoSomething(UINT nID);

Handlerfunktionen einzige für Befehle verwenden normalerweise keine Parameter. Mit Ausnahme von Aktualisierungshandlerfunktionen Handlerfunktionen benötigen für Meldungszuordnungsbereiche einen zusätzlichen Parameter, nID, des Typs UINT. Dieser Parameter ist der erste Parameter. Der zusätzliche Parameter bündelt die zusätzliche Befehls-ID unter, die erforderlich ist, um anzugeben, die der Benutzer ausgewählt hat tatsächlich Befehl verwenden.

Weitere Informationen über Parameteranforderungen zum Aktualisieren der Handlerfunktionen, finden Sie unter Beispiel für einen Bereich von Befehls-IDs.

Beispiel für einen Bereich von Befehls-IDs

Als können Bereiche? Ein Beispiel ist in den Behandlungsbefehlen wie dem Zoombefehl im MFC-Beispiel HIERSVR. Dieser Befehl vergrößert die Ansicht und skaliert es zwischen 25% und 300% seiner normalen Größe. Ansichtsklasse HIERSVRS verwendet einen Bereich, um die Zoombefehle mit einem Eintrag in der Meldungszuordnung zu behandeln, der diesem ähnelt:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

Wenn Sie den Eintrag in der Meldungszuordnung schreiben, geben Sie an:

  • Zwei Befehls-IDs, Anfang und Ende ein zusammenhängender Bereich.

    Hier sind sie ID_VIEW_ZOOM25 und ID_VIEW_ZOOM300.

  • Der Name der Handlerfunktion für die Befehle.

    Hier ist es OnZoom.

Die Funktionsdeklaration würde diesem ähneln:

public:
   afx_msg void OnZoom(UINT nID);

Der Fall von Aktualisierungshandlerfunktionen ist ähnlich, und wahrscheinlich, hilfreich breit. Es ist recht üblich, ON_UPDATE_COMMAND_UI-Handler für einige Befehle zu schreiben und zu suchen Schreiben, oder Kopieren, codieren derselbe immer wieder. Die Lösung besteht darin, einen Bereich von Befehls-IDs zu einer Aktualisierungshandlerfunktion mithilfe des Makros ON_UPDATE_COMMAND_UI_RANGE zuzuordnen. Die Befehls-IDs müssen einen zusammenhängenden Bereich besteht. Ein Beispiel finden Sie den OnUpdateZoom-Handler und den ON_UPDATE_COMMAND_UI_RANGE - Eintrag in der Meldungszuordnung in der Ansichtsklasse des HIERSVR-Beispiel.

Aktualisierungshandlerfunktionen einzige für Befehle verwenden normalerweise einen einzelnen Parameter, pCmdUI, des Typs CCmdUI*. Im Gegensatz Handlerfunktionen benötigen Aktualisierungshandlerfunktionen für Meldungszuordnungsbereiche keinen zusätzlichen Parameter, nID, des Typs UINT. Die Befehls-ID, die erforderlich ist, um anzugeben, die den Benutzer ausgewählten Befehl tatsächlich, wird im CCmdUI-Objekt gefunden.

Beispiel für einen Bereich von Steuerelement-IDs

Ein weiterer interessanter Fall ordnet Steuerelement-Benachrichtigungen für einen Bereich von Steuerelement-IDs einem einzelnen Handler an. Angenommen, der Benutzer eines der auf 10 Schaltflächen klicken kann. Um alle 10 Schaltflächen auf einem Handler zuzuordnen, wird der Eintrag in der Meldungszuordnung wie folgt aussehen:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)  

Wenn Sie das ON_CONTROL_RANGE-Makro in der Meldungszuordnung schreiben, geben Sie an:

  • Eine bestimmte Steuerelement-Benachrichtigung.

    Hier ist es BN_CLICKED.

  • Die Steuerelement-ID-Werte dem zusammenhängenden Bereich von Steuerelementen.

    Hier sind diese IDC_BUTTON1 und IDC_BUTTON10.

  • Der Name der Meldungshandlerfunktion.

    Hier ist es OnButtonClicked.

Wenn Sie die Handlerfunktion schreiben, den UINT zusätzlichen Parameter, wie im Folgenden dargestellt:

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

Der Handler für OnButtonClicked eine einzelne BN_CLICKED Meldung akzeptiert keine Parameter. Derselbe Handler für einen Bereich von Schaltflächen wird ein UINT. Der zusätzliche Parameter können Identifizieren des jeweiligen Steuerelements zu, das zum Generieren der BN_CLICKED Meldung zuständig ist.

Der Code, der im Beispiel gezeigt wird, ist typisch: den Wert konvertieren, an int innerhalb des Meldungsbereiches und -behauptung, dass dieses der Fall ist. Anschließend ergriffen Sie möglicherweise etwas unterschiedliche Aktionen, je nachdem auf die Schaltfläche geklickt wurde.

Siehe auch

Konzepte

Deklarieren von Meldungshandlerfunktionen