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:
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 .
Reservieren Sie ein Symbolleistenbild (Schaltflächensymbol) für die Schaltfläche in allen Bitmaps der übergeordneten Symbolleiste.
Führen Sie im Nachrichtenhandler, der die
AFX_WM_RESETTOOLBAR
Nachricht verarbeitet, die folgenden Schritte aus:Erstellen Sie das Schaltflächensteuerelement mithilfe einer von
CMFCToolbarButton
abgeleiteten Klasse.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 ":
Fügen Sie den Anwendungsressourcen die Schaltfläche und die zugehörigen Befehle hinzu:
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.Erstellen Sie ein neues Menüelement mit der
ID_EDIT_FIND
Befehls-ID.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 vonCEditView
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 BefehlID_EDIT_FIND_COMBO
implementieren.
Erstellen Sie eine neue Klasse,
CFindComboBox
die von der CComboBox-Klasse abgeleitet ist.Überschreiben Sie in der Klasse
CFindComboBox
die virtuelle MethodePreTranslateMessage
. 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 eineWM_COMMAND
-Meldung aus, die die Befehls-IDID_EDIT_FIND_COMBO
enthält.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
.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:Übergeben Sie
ID_EDIT_FIND_COMBO
als Befehls-ID.Verwenden Sie "CCommandManager::GetCmdImage " zum
ID_EDIT_FIND
Abrufen des Bildindexes.Eine Liste der verfügbaren Kombinationsfeld-Formatvorlagen finden Sie unter Kombinationsfeld-Formatvorlagen.
Überschreiben Sie in der
CFindComboButton
-Klasse dieCMFCToolbarComboBoxButton::CreateCombo
-Methode. Hier sollten Sie dasCFindComboButton
-Objekt erstellen und einen Zeiger darauf zurückgeben.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.
Implementieren Sie den
ID_EDIT_FIND_COMBO
-Handler in der Dokumentenansicht. Verwenden Sie CMFCToolBar::GetCommandButtons mitID_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.Verwenden Sie im
ID_EDIT_FIND
NachrichtenhandlerOnFind
CMFCToolBar::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:
Implementieren Sie den
AFX_WM_RESETTOOLBAR
-MeldungshandlerOnToolbarReset
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.
Ü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-IDID_EDIT_FIND)
durch einCFindComboButton
Objekt.Hinweis
Sie können ein
CFindComboBox
-Objekt auf dem Stapel erstellen, daReplaceButton
das Schaltflächenobjekt kopiert und die Kopie beibehält.
Hinzufügen des Suchen-Steuerelements zum Dialogfeld "Anpassen"
Rufen Sie im Anpassungshandler OnViewCustomize
CMFCToolBarsCustomizeDialog::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