Share via


Handler für Meldungszuordnungs-Bereiche

In diesem Artikel wird beschrieben, wie ein Bereich von Nachrichten zu einer einzelnen Meldung handlerfunktion zugeordnet werden (statt auf eine der Zuordnung der Nachricht nur einer Funktion).

Es gibt vorkommen, dass Sie mehr als eine Meldung oder Steuerelementbenachrichtigung auf genau die gleiche Weise verarbeitet werden müssen.So fügen Sie einen Zeitpunkten möchten Sie möglicherweise alle Nachrichten zu einer einzigen Handlerfunktion zuordnen.Meldungszuordnungs Bereiche können Sie dies für einen zusammenhängenden Bereich von Nachrichten zu tun:

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

    • Eine Befehlshandlerfunktion.

    • Eine Funktion zum aktualisierungshandler Befehls.

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

Abgedeckte Themen in diesem Artikel gehören:

  • Schreiben des Meldungszuordnungseintrag

  • Die Handlerfunktion deklarieren

  • Beispiel für einen Bereich von Befehls-IDs

  • Beispiel für einen Bereich von Steuerelement-IDs

Schreiben des Meldungszuordnungseintrag

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

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

Der Meldungszuordnungseintrag besteht aus den folgenden Elementen:

  • Das Meldungszuordnungs Bereichs Makro:

  • Parameter für das Makro:

    Die ersten beiden Makros erhalten drei Parameter:

    • Die Befehls-ID, mit dem der Bereich beginnt

    • Die Befehls-ID, die den Bereich beendet

    • Der Name der Meldung handlerfunktion

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

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

Die Handlerfunktion deklarieren

Fügen Sie die Handlerfunktions in die Deklaration hinzu. .h-Datei.Der folgende Code zeigt, wie dieser schaute u. U. Beispiel:

public:
   afx_msg void OnDoSomething(UINT nID);

Handlerfunktionen für einzige Befehle nehmen normalerweise keine Parameter.Mit Ausnahme von Aktualisierungshandler Handlerfunktionen für Bereiche Meldungszuordnungs Funktionen erfordern einen zusätzlichen Parameter, nID vom Typ UINT.Dieser Parameter ist der erste Parameter.Der zusätzliche Parameter bringt unter Befehls-ID die zusätzliche, die erforderlich ist, um anzugeben, welche Befehl tatsächlich der Benutzer ausgewählt hat.

Weitere Informationen zu Parametern die Anforderungen zum Aktualisieren von Handlerfunktionen finden Sie unter Beispiel für einen Bereich der Befehls-ID.

Beispiel für einen Bereich der Befehls-ID

Als haben Sie möglicherweise Bereiche?Ein Beispiel ist die Behandlung von Befehlen wie dem Befehl im MFC-Beispiel HIERSVR Zoom.Dieser Befehl wird die Ansicht und skaliert es zwischen 25% und 300% seiner normalen Größe.Ansichtsklasse HIERSVRS verwendet einen Bereich, um die Befehle Zoom mit einem Meldungszuordnungseintrag zu behandeln, der diesem ähnelt:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

Wenn Sie den Meldungszuordnungseintrag schreiben, geben Sie Folgendes an:

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

    Hier handelt es ID_VIEW_ZOOM25 und ID_VIEW_ZOOM300.

  • Der Name der Handlerfunktion für die Befehle.

    In diesem Fall ist es OnZoom.

Die Funktionsdeklaration würde diesem ähneln:

public:
   afx_msg void OnZoom(UINT nID);

Im Fall von den Funktionen Aktualisierungshandler ist ähnlich, und sich häufig hilfreich.Es ist recht üblich, ON_UPDATE_COMMAND_UI-Handler für einige Befehle zu schreiben und zu suchen oder Schreiben immer wieder kopieren, der gleiche Code.Die Lösung besteht darin, einen Bereich von Befehls-IDs für eine Funktion Aktualisierungshandler mithilfe des ON_UPDATE_COMMAND_UI_RANGE Makros zuzuordnen.Die Befehls-IDs muss einen zusammenhängenden Bereich bilden.Ein Beispiel finden Sie im OnUpdateZoom-Handler und den ON_UPDATE_COMMAND_UI_RANGE Meldungszuordnungseintrag in der Ansichtsklasse des HIERSVR-Beispiel.

Aktualisierungshandler für Funktionen nehmen normalerweise Befehle nur einen einzelnen Parameter, pCmdUI vom Typ CCmdUI*.Im Gegensatz zu Funktionen benötigen Aktualisierungshandler Handlerfunktionen für Bereiche Meldungszuordnungs keinen zusätzlichen Parameter, nID vom Typ UINT.Die Befehls-ID, die erforderlich ist, um anzugeben, dass das Befehl tatsächlich der Benutzer ausgewählt hat, wird im CCmdUI-Objekt gefunden.

Beispiel für einen Bereich von Steuerelement-IDs

Ein weiterer interessanter Fall weist Steuerelement-Benachrichtigungen für einen Bereich von Steuerelement-IDs zu einem einzelnen Handler an.Angenommen, der Benutzer alle von 10 Schaltflächen klicken kann.Um alle 10 Schaltflächen auf einen Handler zuzuordnen, wird das Meldungszuordnungseintrag 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 Folgendes an:

  • Eine bestimmte Steuerelement-Benachrichtigung.

    In diesem Fall ist es BN_CLICKED.

  • Die Steuerelement-ID-Werten, die dem zusammenhängenden Bereich von Steuerelementen.

    Hier sind diese IDC_BUTTON1 und IDC_BUTTON10.

  • Der Name der Meldung handlerfunktion.

    In diesem Fall ist es OnButtonClicked.

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

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

Der OnButtonClicked-Handler für eine einzelne BN_CLICKED Meldung verwendet keine Parameter.Derselbe Handler für einen Bereich von Schaltflächen übernimmt ein UINT.Der zusätzliche Parameter ermöglicht das Identifizieren des jeweiligen Steuerelements, das zum Generieren der BN_CLICKED Nachricht verantwortlich ist.

Der Code im Beispiel gezeigte ist typisch: das Konvertieren des Werts, der int innerhalb der Nachricht übergebene reichen und Behauptung, dass dies der Fall ist.Anschließend können Sie etwas unterschiedliche Aktionen ausgeführt, je nachdem, welche Schaltfläche geklickt wurde.

Siehe auch

Konzepte

Deklarieren von Meldungshandler-Funktionen