Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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", CMFCToolBarEditBoxButton
CMFCDropDownToolbarButton
"Klasse" oder CMFCToolBarMenuButton
"Klasse".
Hinzufügen von Steuerelementen zu Symbolleisten
Führen Sie die folgenden Schritte aus, um einer Symbolleiste ein Steuerelement hinzuzufügen:
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 .
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
CMFCToolbarButton
abgeleiteten Klasse.Ersetzen Sie die Dummy-Schaltfläche durch das neue Steuerelement mithilfe von
CMFCToolBar::ReplaceButton
. Sie können das Schaltflächenobjekt im Stapel erstellen, daReplaceButton
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::Create
anzeigen, 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 ":
Fügen Sie die Schaltfläche und die zugehörigen Befehle zu den Anwendungsressourcen 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 allen Bitmaps hinzu, die der Symbolleiste zugeordnet sind.Erstellen Sie ein neues Menüelement mit der
ID_EDIT_FIND
Befehls-ID.Fügen Sie der Zeichenfolgentabelle eine neue Zeichenfolge
"Find the text\nFind"
hinzu, und weisen Sie sie einerID_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 vonCEditView
verarbeitet wird, müssen Sie keinen speziellen Handler für diesen Befehl implementieren. Sie müssen jedoch einen Handler für den neuen BefehlID_EDIT_FIND_COMBO
implementieren.
Erstellen Sie eine neue Klasse,
CFindComboBox
die vonCComboBox
"Class" abgeleitet ist.Überschreiben Sie in der
CFindComboBox
Klasse diePreTranslateMessage
virtuelle Methode. Mit dieser Methode kann das Kombinationsfeld dieWM_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 eineWM_COMMAND
Nachricht, die dieID_EDIT_FIND_COMBO
Befehls-ID enthält.Erstellen Sie eine Klasse für die Schaltfläche "Kombinationsfeld suchen ", die von
CMFCToolBarComboBoxButton
"Klasse" abgeleitet ist. In diesem Beispiel wird er benanntCFindComboButton
.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:Übergeben Sie die
ID_EDIT_FIND_COMBO
Befehls-ID.Wird verwendet
CCommandManager::GetCmdImage
,ID_EDIT_FIND
um den Bildindex abzurufen.Eine Liste der verfügbaren Kombinationsfeldarten finden Sie unter Combo-Box 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 machen. Der Arbeitsbereichs-Manager lädt den Zustand der Schaltfläche automatisch und speichert sie in der Windows-Registrierung.Implementieren Sie den
ID_EDIT_FIND_COMBO
Handler in der Dokumentansicht. Wird verwendetCMFCToolBar::GetCommandButtons
,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.Verwenden Sie
CMFCToolBar::IsLastCommandFromButton
imID_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:
Implementieren Sie den
AFX_WM_RESETTOOLBAR
NachrichtenhandlerOnToolbarReset
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.
Überprüfen Sie im
AFX_WM_RESETTOOLBAR
Handler die Symbolleisten-ID, d. h. dieWPARAM
NachrichtAFX_WM_RESETTOOLBAR
. Wenn die Symbolleisten-ID der Symbolleiste entspricht , die die Schaltfläche "Kombinationsfeld suchen" enthält, rufen SieCMFCToolBar::ReplaceButton
auf, um die Schaltfläche " Suchen " (d. h. die Schaltfläche mit der Befehls-IDID_EDIT_FIND
) durch einCFindComboButton
Objekt zu ersetzen.Hinweis
Sie können ein
CFindComboBox
Objekt im Stapel erstellen, daReplaceButton
das Schaltflächenobjekt kopiert und die Kopie verwaltet wird.
Hinzufügen des Suchsteuerelements zum Dialogfeld "Anpassen"
Rufen Sie CMFCToolBarsCustomizeDialog::ReplaceButton
im Anpassungshandler OnViewCustomize
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