Freigeben über


Exemplarische Vorgehensweise: Einfügen von Steuerelementen auf Symbolleisten

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 klasse abgeleitete Klasse sein, zCMFCToolBarComboBoxButton. B. "Klasse", "Klasse", CMFCToolBarEditBoxButtonCMFCDropDownToolbarButton "Klasse" oder CMFCToolBarMenuButton "Klasse".

Hinzufügen von Steuerelementen zu Symbolleisten

Führen Sie die folgenden Schritte aus, um einer Symbolleiste ein Steuerelement hinzuzufügen:

  1. Reservieren Sie eine Dummy-Ressourcen-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 CMFCToolbarButtonabgeleiteten Klasse.

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

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 Symbolleistenstatus wird in der Windows-Registrierung gespeichert, und die Registrierungsinformationen werden geladen und angewendet, nachdem die Methode beim Starten der ReplaceButton Anwendung ausgeführt wurde.

Symbolleistensteuerelemente und Anpassungen

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 die Anpassung aktivieren, erstellen Sie das Dialogfeld "Anpassen " im Anpassungshandler OnViewCustomize mithilfe der CMFCToolBarsCustomizeDialog Klasse . Bevor Sie das Dialogfeld "Anpassen" durch Aufrufen CMFCToolBarsCustomizeDialog::Createanzeigen, rufen Sie auf CMFCToolBarsCustomizeDialog::ReplaceButton , um die Standardschaltfläche durch das neue Steuerelement zu ersetzen.

Beispiel: Erstellen eines Such-Kombinationsfelds

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 in das Steuerelement eingeben und dann die EINGABETASTE drücken, um ein Dokument zu durchsuchen, oder die ESCAPE-TASTE drücken, um den Fokus auf den Hauptrahmen zurückzugeben. In diesem Beispiel wird davon ausgegangen, dass das Dokument in einer von der CEditView Klasse abgeleiteten Ansicht angezeigt wird.

Erstellen des Suchsteuerelements

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

  1. Fügen Sie die Schaltfläche und die zugehörigen Befehle zu den Anwendungsressourcen 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 allen Bitmaps hinzu, die der Symbolleiste zugeordnet sind.

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

    3. Fügen Sie der Zeichenfolgentabelle eine neue Zeichenfolge "Find the text\nFind" hinzu, und weisen Sie sie einer ID_EDIT_FIND_COMBO Befehls-ID zu. Diese ID wird als Befehls-ID der Schaltfläche "Kombinationsfeld suchen" verwendet.

      Hinweis

      Da ID_EDIT_FIND es sich um einen Standardbefehl handelt, der von CEditViewverarbeitet wird, müssen Sie keinen speziellen Handler für diesen Befehl implementieren. Sie müssen jedoch einen Handler für den neuen Befehl ID_EDIT_FIND_COMBOimplementieren.

  2. Erstellen Sie eine neue Klasse, CFindComboBoxdie von CComboBox "Class" abgeleitet ist.

  3. Überschreiben Sie in der CFindComboBox Klasse die PreTranslateMessage virtuelle Methode. Mit dieser Methode kann das Kombinationsfeld die WM_KEYDOWN Nachricht verarbeiten. Wenn der Benutzer auf die Escapetaste (VK_ESCAPE) trifft, geben Sie den Fokus auf das Hauptframefenster zurück. Wenn der Benutzer auf die EINGABETASTE (VK_ENTER) trifft, posten Sie im Hauptframefenster eine WM_COMMAND Nachricht, die die ID_EDIT_FIND_COMBO Befehls-ID enthält.

  4. Erstellen Sie eine Klasse für die Schaltfläche "Kombinationsfeld suchen ", die von CMFCToolBarComboBoxButton "Klasse" abgeleitet ist. In diesem Beispiel wird er benannt CFindComboButton.

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

    1. Übergeben Sie die ID_EDIT_FIND_COMBO Befehls-ID.

    2. Wird verwendet CCommandManager::GetCmdImage , ID_EDIT_FIND um den Bildindex abzurufen.

    3. Eine Liste der verfügbaren Kombinationsfeldarten finden Sie unter Combo-Box 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 machen. Der Arbeitsbereichs-Manager lädt den Zustand der Schaltfläche automatisch und speichert sie in der Windows-Registrierung.

  8. Implementieren Sie den ID_EDIT_FIND_COMBO Handler in der Dokumentansicht. Wird verwendet CMFCToolBar::GetCommandButtons , ID_EDIT_FIND_COMBOum 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 CMFCToolBar::IsLastCommandFromButton im ID_EDIT_FIND NachrichtenhandlerOnFind, um zu bestimmen, ob der Befehl "Suchen" über die Schaltfläche "Kombinationsfeld suchen" gesendet wurde. Wenn ja, suchen Sie den Text, und fügen Sie die Suchzeichenfolge zum Kombinationsfeld hinzu.

Hinzufügen des Suchsteuerelements zur Hauptsymbolleiste

Führen Sie die folgenden Schritte aus, um der Symbolleiste die Kombinationsfeldschaltfläche hinzuzufügen:

  1. Implementieren Sie den AFX_WM_RESETTOOLBAR Nachrichtenhandler OnToolbarReset im Hauptframefenster.

    Hinweis

    Das Framework sendet diese Meldung an das Hauptframefenster, wenn eine Symbolleiste beim Starten der Anwendung 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. die WPARAM Nachricht AFX_WM_RESETTOOLBAR . 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 " (d. h. die Schaltfläche mit der Befehls-ID ID_EDIT_FIND) durch ein CFindComboButton Objekt zu ersetzen.

    Hinweis

    Sie können ein CFindComboBox Objekt im Stapel erstellen, da ReplaceButton das Schaltflächenobjekt kopiert und die Kopie verwaltet wird.

Hinzufügen des Suchsteuerelements zum Dialogfeld "Anpassen"

Rufen Sie CMFCToolBarsCustomizeDialog::ReplaceButton im Anpassungshandler OnViewCustomizeauf, 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