Freigeben über


DYNAMENU-Beispiel: Dynamische Updates Menüs

Das DYNAMENU-Beispiel veranschaulicht dynamische Änderung von Menüs und Statusleisten, unabhängig davon, ob Behandlung Befehle zur Kompilierzeit bekannt sind. DYNAMENU veranschaulicht die folgenden Funktionen:

  • Dynamisch aktualisiert die Liste der Elemente in einem Menü.

  • Implementieren die Entsprechung von ON_COMMAND und ON_UPDATE_COMMAND_UI Kompilierzeit Handlern für Menübefehle, deren IDs zur nicht bekannt sind. In dieser Abbildung kann zu komplexeren Fällen, z. B. Benutzer konfigurierbare Menüs angewendet werden.

  • Aktualisieren die Status-Leiste Eingabeaufforderung für Befehle, deren IDs zur Kompilierzeit nicht bekannt sind.

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

So erstellen Sie und führen das DYNAMENU-Beispiel

  1. Öffnen Sie die Projektmappe dynamenu.sln.

  2. erstellen Sie Menü, klicken Sie auf erstellen.

  3. Debuggen Sie auf Menü, klicken Sie auf Starten ohne Debuggen.

DYNAMENU zeigt anfangs ein Fenster mit dem Text: "dieser Text wird in der aktuellen Farbe angezeigt." Sie können die Farbe des angezeigten Texts ändern, indem Sie eine der vier Anfangs im Menü Color angebotenen Optionen auswählen: Schwarz, Rot, Violett oder Blau.

Klicken Sie auf Optionen Änderungen im Farbe Menü die Öffnet das Dialogfeld Farboptionen ändern, um das dynamische Menü aktualisieren Feature von DYNAMENU zu Übung. Kontrollkästchen für Schwarz, Rot, Violett und Blau können Sie auswählen, welche Farben im Menü Color dynamisch angeboten werden. Wenn Sie die Kontrollkästchen Red und Purple deaktivieren und wieder im Farbe, werden nur Schwarz und Blau-Elemente im "angeboten.

Beachten Sie wie der Statusleiste angezeigt, z. B. "Text Set current Color Text to Black" angezeigtWenn liegt der Schwerpunkt auf das schwarze Element in Menü Color.

Dynamisches Aktualisieren der Liste der Elemente in einem Menü

Klasse CDynaMDIChildWnd in Mdichild.cpp implementiert das dynamische Aktualisieren von Elementen im Menü Color. Wenn die Liste der verfügbaren Farben aktualisiert wird oder wenn Sie dann untergeordnete MDI-Fenster aktiviert wird, die Funktion CDynaMDIChildWnd::RefreshColorMenuCMenu::DeleteMenu So löschen Sie jedes Element Farbe aus dem Menü ruft, und fügt dann die derzeit verfügbaren Farben auf das Menü mit CMenu::AppendMenu.

Implementieren von Befehlshandlern für dynamische Menüelemente

DYNAMENU könnte implementiert wurden durch das Reservieren einer feststehenden Liste von Befehls-IDs für die Farben: ID_COLOR_BLACK, ID_COLOR_RED usw.. In einem solchen Fall ON_COMMAND und ON_UPDATE_COMMAND_UI Handler konnte für die Farbe Befehle wie gewohnt implementiert wurden. Dies wäre der direkteste Ansatz zum Implementieren von DYNAMENU.

Allerdings verwendet DYNAMENU für der Abbildung nicht feste Befehls-IDs. Stattdessen weist DYNAMENU dynamisch Befehls-IDs nicht bekannt oder die Menüelemente zur Kompilierzeit zugeordnet. In dieser Abbildung kann zu komplexeren Fällen, z. B. Benutzer konfigurierbare Menüs angewendet werden.

Die Entsprechung von ON_COMMAND und ON_UPDATE_COMMAND Nachricht Zuordnung Behandlung in das Dokument zum Überschreiben der CCmdTarget::OnCmdMsg implementiert ist. Wenn die Funktion OnCmdMsg mit einem NULL-Zeiger aufgerufen wird, für die AFX_CMDHANDLERINFO***** Parameter, dies bedeutet, dass kein Meldungszuordnungseintrag für den Befehl gefunden wurde. In diesem Fall überprüft die Überschreibung von OnCmdMsg, ob der Befehls-ID, als ersten Parameter übergeben wurde eine der dynamisch zugewiesenen Befehls-IDs für die Menüelemente Farbe ist. Wenn also die Überschreibung ruft entweder ein Befehlshandler (DoSelectColor) oder Benutzer Schnittstelle Befehlshandler (DoUpdateSelectColor), je nachdem, ob der zweite Parameter übergeben, um OnCmdMsg wird von der MFC-definiert CN_COMMAND oder CN_UPDATE_COMMAND_UI.

Statusleiste-Eingabeaufforderung für dynamische Menüelemente aktualisieren

In DYNAMENU besitzt das untergeordnete MDI-Fenster (CDynaMDIChildWnd) der Statusleiste angezeigt. Die Standardimplementierung von CFrameWnd::GetMessageString verwendet die aktuell angezeigte Befehls-ID (für das Element, das gerade den Fokus besitzt), erhalten die entsprechende Zeichenfolgenressource für den Befehl und im ersten Bereich der Statusleiste angezeigt. DYNAMENU überschreibt GetMessageString um eine Eingabeaufforderung für die dynamisch definierten Befehle anzuzeigen.

Schlüsselwörter

Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:

AfxFormatString1; AfxGetMainWnd; CCmdTarget::OnCmdMsg; CDialog::DoModal; CDialog::OnInitDialog; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::OnNewDocument; CDocument::UpdateAllViews; CFrameWnd::Create; CFrameWnd::GetActiveDocument; CFrameWnd::GetMessageString; CFrameWnd::LoadFrame; CMenu::AppendMenu; CMenu::DeleteMenu; CMenu::GetMenuItemCount; CMenu::GetMenuItemID; CMenu::GetSubMenu; CObject::AssertValid; CObject::Dump; CObject::Serialize; CString::LoadString; CView::DoPreparePrinting; CView::GetDocument; CView::OnBeginPrinting; CView::OnDraw; CView::OnEndPrinting; CView::OnPreparePrinting; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::CenterWindow; CWnd::DoDataExchange; CWnd::GetClientRect; CWnd::GetDlgItem; CWnd::GetMenu; CWnd::GetParentFrame; CWnd::OnCreate; CWnd::SetWindowText; CWnd::ShowWindow; CWnd::UpdateWindow; DragAcceptFiles; DrawText; LoadBitmap; RGB; SetBkMode; SetTextColor

Hinweis

Einige Beispiele, z. B. eine, wurden nicht geändert, um Änderungen in der Visual C++-Assistenten, Bibliotheken und Compiler, demonstrieren aber dennoch wie Sie die gewünschte Aufgabe durchführen.

Siehe auch

Weitere Ressourcen

MFC-Beispiele