Exemplarische Vorgehensweise: Steuerelemente in eine Symbolleiste einfügen

In diesem Artikel wird beschrieben, wie Sie eine Symbolleistenschaltfläche hinzufügen, die ein Windows-Steuerelement zu einer Symbolleiste enthält. In MFC muss eine Symbolleistenschaltfläche eine CMFCToolBarButton Class-abgeleitete Klasse sein, z . B. CMFCToolBarComboBoxButton-Klasse, CMFCToolBarEditBoxButton-Klasse, CMFCDropDownToolbarButton-Klasse oder CMFCToolBarMenuButton-Klasse.

Hinzufügen von Steuerelementen zu Symbolleisten

Führen Sie zum Hinzufügen eines Steuerelements zu einer Symbolleiste die folgenden Schritte aus:

  1. Reservieren Sie eine Platzhalterressourcen-ID für die Schaltfläche in der übergeordneten Symbolleistenressource. Weitere Informationen zum Erstellen von Schaltflächen mithilfe des Symbolleisten-Editors in Visual Studio finden Sie im Artikel zum Symbolleisten-Editor .

  2. Reservieren Sie ein Symbolleistenbild (Schaltflächensymbol) für die Schaltfläche in allen Bitmaps der übergeordneten Symbolleiste.

  3. Führen Sie im Nachrichtenhandler, der die AFX_WM_RESETTOOLBAR Nachricht verarbeitet, die folgenden Schritte aus:

    1. Erstellen Sie das Schaltflächensteuerelement mithilfe einer von CMFCToolbarButton abgeleiteten Klasse.

    2. Ersetzen Sie die Dummy-Schaltfläche durch das neue Steuerelement mithilfe von CMFCToolBar::ReplaceButton. Sie können das Schaltflächenobjekt auf dem Stapel erstellen, da ReplaceButton das Schaltflächenobjekt kopiert und die Kopie beibehält.

Hinweis

Wenn Sie die Anpassung in Ihrer Anwendung aktiviert haben, müssen Sie die Symbolleiste möglicherweise mithilfe der Schaltfläche "Zurücksetzen" auf der Registerkarte "Symbolleisten" des Dialogfelds "Anpassen" zurücksetzen, um das aktualisierte Steuerelement in Ihrer Anwendung nach der erneuten Kompilierung anzuzeigen. Der Zustand der Symbolleiste wird in der Windows-Registrierung gespeichert, und die Registrierungsinformationen werden geladen und angewendet, nachdem die ReplaceButton-Methode während des Anwendungsstarts ausgeführt wurde.

Symbolleisten-Steuerelemente und Anpassung

Die Registerkarte "Befehle" des Dialogfelds "Anpassen" enthält eine Liste der Befehle, die in der Anwendung verfügbar sind. Standardmäßig verarbeitet das Dialogfeld "Anpassen " die Anwendungsmenüs und erstellt eine Liste der Standardsymbolleistenschaltflächen in jeder Menükategorie. Damit die erweiterten Funktionen, die die Symbolleistensteuerelemente bereitstellen, erhalten bleiben, müssen Sie die Standardsymbolleistenschaltfläche durch das benutzerdefinierte Steuerelement im Dialogfeld "Anpassen " ersetzen.

Wenn Sie anpassungen aktivieren, erstellen Sie das Dialogfeld "Anpassen " im Anpassungshandler OnViewCustomize mithilfe der CMFCToolBarsCustomizeDialog-Klasse . Bevor Sie das Dialogfeld Anpassen anzeigen, indem Sie CMFCToolBarsCustomizeDialog::Create aufrufen, rufen Sie CMFCToolBarsCustomizeDialog::ReplaceButton auf, um die Standardschaltfläche durch das neue Steuerelement zu ersetzen.

Beispiel: Erstellen eines Suchkombinationsfelds

In diesem Abschnitt wird beschrieben, wie Sie ein Kombinationsfeld-Steuerelement suchen erstellen, das auf einer Symbolleiste angezeigt wird und zuletzt verwendete Suchzeichenfolgen enthält. Der Benutzer kann eine Zeichenfolge im Steuerelement eingeben und die EINGABETASTE drücken, um ein Dokument zu suchen, oder er kann die ESC-TASTE drücken, um zum Hauptframe zurückzukehren. In diesem Beispiel wird davon ausgegangen, dass das Dokument in einer von der CEditView-Klasse abgeleiteten Ansicht angezeigt wird.

Erstellen des Suchen-Steuerelements

Erstellen Sie zunächst das Steuerelement "Kombinationsfeld suchen ":

  1. Fügen Sie den Anwendungsressourcen die Schaltfläche und die zugehörigen Befehle hinzu:

    1. Fügen Sie in den Anwendungsressourcen eine neue Schaltfläche mit einer ID_EDIT_FIND-Befehls-ID zu einer Symbolleiste in Ihrer Anwendung und zu allen der Symbolleiste zugeordneten Bitmaps hinzu.

    2. Erstellen Sie ein neues Menüelement mit der ID_EDIT_FIND Befehls-ID.

    3. Fügen Sie der Zeichenfolgentabelle eine neue Zeichenfolge "Text suchen\nSuchen" hinzu, und weisen Sie ihr eine ID_EDIT_FIND_COMBO-Befehls-ID zu. Diese ID wird als Befehls-ID der Schaltfläche "Kombinationsfeld suchen" verwendet.

      Hinweis

      Da ID_EDIT_FIND ein Standardbefehl ist, der von CEditView verarbeitet wird, ist es nicht erforderlich, einen speziellen Handler für diesen Befehl zu implementieren. Sie müssen jedoch einen Handler für den neuen Befehl ID_EDIT_FIND_COMBO implementieren.

  2. Erstellen Sie eine neue Klasse, CFindComboBoxdie von der CComboBox-Klasse abgeleitet ist.

  3. Überschreiben Sie in der Klasse CFindComboBox die virtuelle Methode PreTranslateMessage. Mit dieser Methode kann das Kombinationsfeld die WM_KEYDOWN Nachricht verarbeiten. Wenn der Benutzer die ESC-TASTE (VK_ESCAPE) drückt, kehren Sie zum Hauptrahmenfenster zurück. Wenn der Benutzer die EINGABETASTE (VK_ENTER) drückt, geben Sie im Hauptrahmenfenster eine WM_COMMAND-Meldung aus, die die Befehls-ID ID_EDIT_FIND_COMBO enthält.

  4. Erstellen Sie eine Klasse für die Schaltfläche "Kombinationsfeld suchen", die von der CMFCToolBarComboBoxButton-Klasse abgeleitet ist. In diesem Beispiel hat es den Namen CFindComboButton.

  5. Der Konstruktor von CMFCToolbarComboBoxButton akzeptiert drei Parameter: die Befehls-ID der Schaltfläche, den Index des Schaltflächensymbols und das Format des Kombinationsfelds. Legen Sie diese Parameter wie folgt fest:

    1. Übergeben Sie ID_EDIT_FIND_COMBO als Befehls-ID.

    2. Verwenden Sie "CCommandManager::GetCmdImage " zum ID_EDIT_FIND Abrufen des Bildindexes.

    3. Eine Liste der verfügbaren Kombinationsfeld-Formatvorlagen finden Sie unter Kombinationsfeld-Formatvorlagen.

  6. Überschreiben Sie in der CFindComboButton-Klasse die CMFCToolbarComboBoxButton::CreateCombo-Methode. Hier sollten Sie das CFindComboButton-Objekt erstellen und einen Zeiger darauf zurückgeben.

  7. Verwenden Sie das IMPLEMENT_SERIAL Makro, um die Kombinationsschaltfläche dauerhaft zu gestalten. Der Arbeitsbereichs-Manager lädt und speichert den Zustand der Schaltfläche automatisch in der Windows-Registrierung.

  8. Implementieren Sie den ID_EDIT_FIND_COMBO-Handler in der Dokumentenansicht. Verwenden Sie CMFCToolBar::GetCommandButtons mit ID_EDIT_FIND_COMBO , um alle Schaltflächen für das Such-Kombinationsfeld abzurufen. Aufgrund der Anpassung können mehrere Kopien einer Schaltfläche mit derselben Befehls-ID vorhanden sein.

  9. Verwenden Sie im ID_EDIT_FIND Nachrichtenhandler OnFindCMFCToolBar::IsLastCommandFromButton, um zu bestimmen, ob der Befehl "Suchen" über die Schaltfläche "Kombinationsfeld suchen" gesendet wurde. Wenn dies der Fall ist, suchen Sie den Text, und fügen Sie dem Kombinationsfeld die Suchzeichenfolge hinzu.

Hinzufügen des Suchen-Steuerelements zur Hauptsymbolleiste

Führen Sie zum Hinzufügen der Kombinationsfeldschaltfläche zur Symbolleiste die folgenden Schritte aus:

  1. Implementieren Sie den AFX_WM_RESETTOOLBAR-Meldungshandler OnToolbarReset im Hauptrahmenfenster.

    Hinweis

    Das Framework sendet diese Meldung an das Hauptrahmenfenster, wenn während des Anwendungsstarts eine Symbolleiste initialisiert wird oder wenn eine Symbolleiste während der Anpassung zurückgesetzt wird. In beiden Fällen müssen Sie die Standardsymbolleistenschaltfläche durch die benutzerdefinierte Schaltfläche "Suchen " ersetzen.

  2. Überprüfen Sie im AFX_WM_RESETTOOLBAR Handler die Symbolleisten-ID, d. h. den WPARAM der AFX_WM_RESETTOOLBAR Nachricht. Wenn die Symbolleisten-ID der Symbolleiste entspricht, die die Schaltfläche "Kombinationsfeld suchen" enthält, rufen Sie CMFCToolBar::ReplaceButton auf, um die Schaltfläche "Suchen" zu ersetzen (d. h. die Schaltfläche mit der Befehls-ID ID_EDIT_FIND) durch ein CFindComboButton Objekt.

    Hinweis

    Sie können ein CFindComboBox-Objekt auf dem Stapel erstellen, da ReplaceButton das Schaltflächenobjekt kopiert und die Kopie beibehält.

Hinzufügen des Suchen-Steuerelements zum Dialogfeld "Anpassen"

Rufen Sie im Anpassungshandler OnViewCustomizeCMFCToolBarsCustomizeDialog::ReplaceButton auf, um die Schaltfläche "Suchen" (d. h. die Schaltfläche mit der Befehls-IDID_EDIT_FIND) durch ein CFindComboButton Objekt zu ersetzen.

Siehe auch

Hierarchiediagramm
Klassen
CMFCToolBar-Klasse
CMFCToolBarButton-Klasse
CMFCToolBarComboBoxButton-Klasse
CMFCToolBarsCustomizeDialog-Klasse