TN022: Implementieren von Standardbefehlen

Hinweis

Der folgende technische Hinweis wurde seit dem ersten Erscheinen in der Onlinedokumentation nicht aktualisiert. Daher können einige Verfahren und Themen veraltet oder falsch sein. Um aktuelle Informationen zu erhalten, wird empfohlen, das gewünschte Thema im Index der Onlinedokumentation zu suchen.

In diesem Hinweis werden die von MFC 2.0 bereitgestellten Standardbefehlsimplementierungen beschrieben. Lesen Sie zuerst den technischen Hinweis 21 , da sie die Mechanismen beschreibt, mit denen viele der Standardbefehle implementiert werden.

In dieser Beschreibung wird davon ausgegangen, dass sie kenntnisse der MFC-Architekturen, APIs und gängigen Programmierpraxis kennen. Dokumentierte und nicht dokumentierte "nur Implementierung"-APIs werden beschrieben. Dies ist kein Ort, um mit dem Erlernen der Features oder der Programmierung in MFC zu beginnen. Weitere allgemeine Informationen und Details zu dokumentierten APIs finden Sie unter Visual C++.

Problemstellung

MFC definiert viele Standardbefehls-IDs in der Headerdatei AFXRES.H. Die Frameworkunterstützung für diese Befehle variiert. Wenn Sie wissen, wo und wie die Frameworkklassen diese Befehle behandeln, zeigen Sie nicht nur, wie das Framework intern funktioniert, sondern bietet nützliche Informationen zum Anpassen der Standardimplementierungen und vermittelt Ihnen einige Techniken für die Implementierung eigener Befehlshandler.

Inhalt dieses technischen Hinweises

Jede Befehls-ID wird in zwei Abschnitten beschrieben:

  • Der Titel: der symbolische Name der Befehls-ID (z. B. ID_FILE_SAVE) gefolgt vom Zweck des Befehls (z. B. "speichert das aktuelle Dokument") getrennt durch einen Doppelpunkt.

  • Mindestens ein Absatz, der beschreibt, welche Klassen den Befehl implementieren und was die Standardimplementierung bewirkt

Die meisten Standardbefehlsimplementierungen sind in der Basisklassen-Nachrichtenzuordnung des Frameworks verankert. Es gibt einige Befehlsimplementierungen, die eine explizite Verkabelung in Ihrer abgeleiteten Klasse erfordern. Diese werden unter "Hinweis" beschrieben. Wenn Sie die richtigen Optionen in AppWizard ausgewählt haben, werden diese Standardhandler für Sie in der generierten Skelettanwendung verbunden.

Benennungskonvention

Standardbefehle folgen einer einfachen Benennungskonvention, die Sie nach Möglichkeit verwenden sollten. Die meisten Standardbefehle befinden sich an Standardplätzen in der Menüleiste einer Anwendung. Der symbolische Name des Befehls beginnt mit "ID_" gefolgt vom Standardmäßigen Popupmenünamen, gefolgt vom Namen des Menüelements. Der symbolische Name befindet sich in Großbuchstaben mit Unterstrich-Wortumbrüchen. Bei Befehlen ohne Standardmenüelementnamen wird ein logischer Befehlsname beginnend mit "ID_" definiert (z. B. ID_NEXT_PANE).

Wir verwenden das Präfix "ID_", um Befehle anzugeben, die an Menüelemente, Symbolleistenschaltflächen oder andere Benutzeroberflächenobjekte gebunden sind. Befehlshandler, die "ID_"-Befehle behandeln, sollten die ON_COMMAND und ON_UPDATE_COMMAND_UI Mechanismen der MFC-Befehlsarchitektur verwenden.

Es wird empfohlen, das Standardpräfix "IDM_" für Menüelemente zu verwenden, die nicht der Befehlsarchitektur folgen und menüspezifischen Code benötigen, um sie zu aktivieren und zu deaktivieren. Natürlich sollte die Anzahl der menüspezifischen Befehle klein sein, da die MFC-Befehlsarchitektur nicht nur Befehlshandler leistungsstärker macht (da sie mit Symbolleisten arbeiten), sondern der Befehlshandlercode wiederverwendbar macht.

ID-Bereiche

Weitere Informationen zur Verwendung von ID-Bereichen in MFC finden Sie im Technischen Hinweis 20 .

MFC-Standardbefehle fallen in den Bereich 0xE000 auf 0xEFFF. Verlassen Sie sich nicht auf die spezifischen Werte dieser IDs, da sie in zukünftigen Versionen der Bibliothek geändert werden können.

Ihre Anwendung sollte ihre Befehle im Bereich definieren, 0x8000 sie 0xDFFF.

Standardbefehls-IDs

Für jede Befehls-ID gibt es eine standardmäßige Meldungszeilen-Eingabeaufforderungszeichenfolge, die in der Datei PROMPTS zu finden ist. RC. Die Zeichenfolgen-ID für diese Menüaufforderung muss mit der Befehls-ID übereinstimmen.

  • ID_FILE_NEW Erstellt ein neues/leeres Dokument.

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CWinAppabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    CWinApp::OnFileNew implementiert diesen Befehl je nach Anzahl der Dokumentvorlagen in der Anwendung unterschiedlich. Wenn nur ein CDocTemplateDokument vorhanden ist, CWinApp::OnFileNew wird ein neues Dokument dieses Typs sowie die richtige Frame- und Ansichtsklasse erstellt.

    Wenn mehrere vorhanden sind CDocTemplate, fordert der Benutzer mit einem Dialogfeld (AFX_IDD_NEWTYPEDLG) auf, CWinApp::OnFileNew in dem er auswählen kann, welcher Dokumenttyp verwendet werden soll. Das ausgewählte CDocTemplate Objekt wird verwendet, um das Dokument zu erstellen.

    Eine allgemeine Anpassung von ID_FILE_NEW besteht darin, eine andere und grafischere Auswahl von Dokumenttypen bereitzustellen. In diesem Fall können Sie ihre eigene CMyApp::OnFileNew implementieren und sie in Ihrer Nachrichtenkarte statt CWinApp::OnFileNewin der Nachrichtenkarte platzieren. Es ist nicht erforderlich, die Basisklassenimplementierung aufzurufen.

    Eine weitere allgemeine Anpassung von ID_FILE_NEW besteht darin, einen separaten Befehl zum Erstellen eines Dokuments jedes Typs bereitzustellen. In diesem Fall sollten Sie neue Befehls-IDs definieren, z. B. ID_FILE_NEW_CHART und ID_FILE_NEW_SHEET.

  • ID_FILE_OPEN Öffnet ein vorhandenes Dokument.

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CWinAppabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    CWinApp::OnFileOpen verfügt über eine sehr einfache Implementierung des Aufrufens CWinApp::DoPromptFileName gefolgt von CWinApp::OpenDocumentFile der Datei oder dem Pfadnamen der zu öffnenden Datei. Die CWinApp Implementierungsroutine DoPromptFileName führt das Standardmäßige Dialogfeld "FileOpen" ein und füllt es mit den Dateierweiterungen aus, die aus den aktuellen Dokumentvorlagen abgerufen wurden.

    Eine häufige Anpassung von ID_FILE_OPEN besteht darin, das Dialogfeld "FileOpen" anzupassen oder zusätzliche Dateifilter hinzuzufügen. Die empfohlene Möglichkeit zum Anpassen besteht darin, die Standardimplementierung durch Ihr eigenes FileOpen-Dialogfeld zu ersetzen und mit dem Namen der Datei oder des Pfads des Dokuments aufzurufen CWinApp::OpenDocumentFile . Es ist nicht erforderlich, die Basisklasse aufzurufen.

  • ID_FILE_CLOSE schließt das aktuell geöffnete Dokument.

    CDocument::OnFileClose Aufrufe CDocument::SaveModified , um den Benutzer aufzufordern, das Dokument zu speichern, wenn es geändert wurde, und ruft dann auf OnCloseDocument. Die gesamte schließende Logik, einschließlich der Zerstörung des Dokuments, erfolgt in der OnCloseDocument Routine.

    Hinweis

    ID_FILE_CLOSE verhält sich anders als eine WM_CLOSE Nachricht oder ein SC_CLOSE Systembefehl, der an das Dokumentrahmenfenster gesendet wird. Durch das Schließen eines Fensters wird das Dokument nur geschlossen, wenn es sich um das letzte Rahmenfenster handelt, in dem das Dokument angezeigt wird. Wenn Sie das Dokument mit ID_FILE_CLOSE schließen, wird das Dokument nicht nur geschlossen, sondern alle Rahmenfenster geschlossen, in denen das Dokument angezeigt wird.

  • ID_FILE_SAVE Speichert das aktuelle Dokument.

    Die Implementierung verwendet eine HilfsroutineCDocument::DoSave, die sowohl für als auch OnFileSaveAsOnFileSave für . Wenn Sie ein Dokument speichern, das noch nicht gespeichert wurde (d. h., es hat keinen Pfadnamen, wie im Fall von FileNew), oder das aus einem schreibgeschützten Dokument gelesen wurde, fungiert die OnFileSave Logik wie der befehl ID_FILE_SAVE_AS und fordert den Benutzer auf, einen neuen Dateinamen anzugeben. Der eigentliche Prozess zum Öffnen der Datei und zum Ausführen der Speicherung erfolgt über die virtuelle Funktion OnSaveDocument.

    Es gibt zwei häufige Gründe, ID_FILE_SAVE anzupassen. Entfernen Sie für Dokumente, die nicht gespeichert werden, einfach die ID_FILE_SAVE Menüelemente und Symbolleistenschaltflächen von der Benutzeroberfläche. Stellen Sie außerdem sicher, dass Sie Ihr Dokument niemals modifiziert (d. h. nie aufrufenCDocument::SetModifiedFlag), und das Framework bewirkt nie, dass das Dokument gespeichert wird. Definieren Sie für Dokumente, die an einem anderen Speicherort als einer Datenträgerdatei gespeichert werden, einen neuen Befehl für diesen Vorgang.

    Bei einem COleServerDoc, ID_FILE_SAVE wird sowohl für die Dateispeicherung (für normale Dokumente) als auch für die Dateiaktualisierung (für eingebettete Dokumente) verwendet.

    Wenn Ihre Dokumentdaten in einzelnen Datenträgerdateien gespeichert werden, sie aber nicht die standardmäßige CDocument Serialisierungsimplementierung verwenden möchten, sollten Sie anstelle CDocument::OnSaveDocument von OnFileSave.

  • ID_FILE_SAVE_AS Speichert das aktuelle Dokument unter einem anderen Dateinamen.

    Die CDocument::OnFileSaveAs Implementierung verwendet dieselbe CDocument::DoSave Hilfsroutine wie OnFileSave. Der OnFileSaveAs Befehl wird genauso wie ID_FILE_SAVE behandelt, wenn die Dokumente vor dem Speichern keinen Dateinamen hatten. COleServerDoc::OnFileSaveAs implementiert die Logik zum Speichern einer normalen Dokumentdatendatei oder zum Speichern eines Serverdokuments, das ein in eine andere Anwendung eingebettetes OLE-Objekt als separate Datei darstellt.

    Wenn Sie die Logik von ID_FILE_SAVE anpassen, möchten Sie wahrscheinlich ID_FILE_SAVE_AS auf ähnliche Weise anpassen, oder der Vorgang von "Speichern unter" gilt möglicherweise nicht für Ihr Dokument. Sie können das Menüelement aus der Menüleiste entfernen, wenn es nicht benötigt wird.

  • ID_FILE_SAVE_COPY_AS Speichert ein aktuelles Dokument unter einem neuen Namen.

    Die COleServerDoc::OnFileSaveCopyAs Implementierung ist sehr ähnlich wie CDocument::OnFileSaveAs, mit der Ausnahme, dass das Dokumentobjekt nach dem Speichern nicht an die zugrunde liegende Datei angefügt ist. Das heißt, wenn das Speicherdokument vor dem Speichern "geändert" wurde, wird es weiterhin "geändert". Darüber hinaus hat dieser Befehl keine Auswirkungen auf den Im Dokument gespeicherten Pfadnamen oder Titel.

  • ID_FILE_UPDATE benachrichtigt den Container, ein eingebettetes Dokument zu speichern.

    Die COleServerDoc::OnUpdateDocument Implementierung benachrichtigt einfach den Container, dass die Einbettung gespeichert werden soll. Anschließend ruft der Container die entsprechenden OLE-APIs auf, um das eingebettete Objekt zu speichern.

  • ID_FILE_PAGE_SETUP Ruft ein anwendungsspezifisches Seiteneinrichtungs-/Layoutdialogfeld auf.

    Derzeit gibt es keinen Standard für dieses Dialogfeld, und das Framework hat keine Standardimplementierung dieses Befehls.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_FILE_PRINT_SETUP Das Standarddialogfeld "Drucken einrichten" aufrufen.

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CWinAppabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    Mit diesem Befehl wird das Standardmäßige Druckeinrichtungsdialogfeld aufgerufen, in dem der Benutzer die Drucker- und Druckeinstellungen für mindestens dieses Dokument oder die meisten Dokumente in dieser Anwendung anpassen kann. Sie müssen die Systemsteuerung verwenden, um die Standarddruckereinstellungen für das gesamte System zu ändern.

    CWinApp::OnFilePrintSetup verfügt über eine sehr einfache Implementierung, die ein CPrintDialog Objekt erstellt und die Implementierungsfunktion CWinApp::DoPrintDialog aufruft. Dadurch wird die Standarddruckereinrichtung der Anwendung festgelegt.

    Die allgemeine Notwendigkeit zum Anpassen dieses Befehls besteht darin, Druckereinstellungen pro Dokument zuzulassen, die beim Speichern mit dem Dokument gespeichert werden sollen. Dazu sollten Sie in Ihrer CDocument Klasse einen Nachrichtenzuordnungshandler hinzufügen, der ein CPrintDialog Objekt erstellt, es mit den entsprechenden Druckerattributen initialisiert (in der Regel hDevMode und hDevNames), die CPrintDialog::DoModalgeänderten Druckereinstellungen aufrufen und speichern. Bei einer robusten Implementierung sollten Sie sich die Implementierung zur Erkennung von CWinApp::DoPrintDialog Fehlern und CWinApp::UpdatePrinterSelection zum Umgang mit sinnvollen Standardeinstellungen und zum Nachverfolgen systemweiter Druckeränderungen ansehen.

  • ID_FILE_PRINT Standarddruck des aktuellen Dokuments

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CViewabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    Mit diesem Befehl wird das aktuelle Dokument oder richtiger gedruckt, der Druckvorgang gestartet. Dazu gehört das Aufrufen des Standarddruckdialogfelds und das Ausführen des Druckmoduls.

    CView::OnFilePrintimplementiert diesen Befehl und die Standard Druckschleife. Er ruft die virtuelle CView::OnPreparePrinting Aufforderung des Benutzers mit dem Druckdialogfeld auf. Anschließend wird die Ausgabe DC vorbereitet, um zum Drucker zu wechseln, das Dialogfeld "Druckfortschritt" (AFX_IDD_PRINTDLG) angezeigt und das StartDoc Escapezeichen an den Drucker gesendet. CView::OnFilePrintenthält auch die Standard seitenorientierte Druckschleife. Für jede Seite wird die virtuelle CView::OnPrepareDC Seite aufgerufen, gefolgt von einem StartPage Escapezeichen und dem Aufrufen der virtuellen CView::OnPrint Seite. Nach Abschluss des Vorgangs wird die virtuelle CView::OnEndPrinting Datei aufgerufen, und das Dialogfeld "Druckfortschritt" wird geschlossen.

    Die MFC-Druckarchitektur wurde so konzipiert, dass sie auf viele verschiedene Arten zum Drucken und Drucken der Seitenansicht eingebunden werden kann. Normalerweise finden Sie die verschiedenen CView überschreibbaren Funktionen, die für alle seitenorientierten Druckaufgaben geeignet sind. Nur im Fall einer Anwendung, die den Drucker für die nicht seitenorientierte Ausgabe verwendet, sollten Sie feststellen, dass die ID_FILE_PRINT Implementierung ersetzt werden muss.

  • ID_FILE_PRINT_PREVIEW Geben Sie den Druckvorschaumodus für das aktuelle Dokument ein.

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CViewabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    CView::OnFilePrintPreview startet den Druckvorschaumodus, indem die dokumentierte Hilfsfunktion CView::DoPrintPreviewaufgerufen wird. CView::DoPrintPreviewist die Standard Engine für die Druckvorschauschleife, genau wie OnFilePrint die Standard Engine für die Druckschleife.

    Der Druckvorschauvorgang kann auf unterschiedliche Weise angepasst werden, indem verschiedene Parameter übergeben werden DoPrintPreview. Bitte lesen Sie den technischen Hinweis 30, in dem einige Details der Seitenansicht und deren Anpassung erläutert werden.

  • ID_FILE_MRU_FILE1... FILE16 Ein Bereich von Befehls-IDs für die Datei-MRU-Liste.

    CWinApp::OnUpdateRecentFileMenu ist ein Updatebefehls-UI-Handler, der einer der erweiterten Verwendungsmöglichkeiten des ON_UPDATE_COMMAND_UI Mechanismus ist. In Ihrer Menüressource müssen Sie nur ein einzelnes Menüelement mit id ID_FILE_MRU_FILE1 definieren. Dieses Menüelement wurde zunächst wieder deaktiviert Standard.

    Wenn die MRU-Liste wächst, werden der Liste weitere Menüelemente hinzugefügt. Die Standardimplementierung CWinApp ist standardmäßig auf den Standardgrenzwert der vier zuletzt verwendeten Dateien festgelegt. Sie können die Standardeinstellung ändern, indem Sie einen größeren oder kleineren Wert aufrufen CWinApp::LoadStdProfileSettings . Die MRU-Liste wird in der Anwendung gespeichert. INI-Datei. Die Liste wird in die Funktion Ihrer Anwendung geladen, wenn Sie die Anwendung InitInstance aufrufen LoadStdProfileSettingsund beim Beenden der Anwendung gespeichert werden. Der MRU-Aktualisierungsbefehls-UI-Handler konvertiert auch absolute Pfade in relative Pfade für die Anzeige im Dateimenü.

    CWinApp::OnOpenRecentFile ist der ON_COMMAND-Handler, der den tatsächlichen Befehl ausführt. Er ruft einfach den Dateinamen aus der MRU-Liste ab und ruft auf CWinApp::OpenDocumentFile, was alles tut, um die Datei zu öffnen und die MRU-Liste zu aktualisieren.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_EDIT_CLEAR Löscht die aktuelle Auswahl

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls mithilfe CEdit::Clearvon . Der Befehl ist deaktiviert, wenn keine aktuelle Auswahl vorhanden ist.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_CLEAR_ALL Löscht das gesamte Dokument.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden. Eine Beispielimplementierung finden Sie im MFC-Lernprogramm SCRIBBLE .

  • ID_EDIT_COPY Kopiert die aktuelle Auswahl in die Zwischenablage.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls bereit, mit dem der aktuell markierte Text als CF_TEXT in CEdit::Copydie Zwischenablage kopiert wird. Der Befehl ist deaktiviert, wenn keine aktuelle Auswahl vorhanden ist.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_CUT Schneidet die aktuelle Auswahl in die Zwischenablage.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls bereit, der den aktuell ausgewählten Text als CF_TEXT verwendet CEdit::Cutin die Zwischenablage ausschneidet. Der Befehl ist deaktiviert, wenn keine aktuelle Auswahl vorhanden ist.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_FIND Startet den Suchvorgang, öffnet das Dialogfeld "Moduslose Suche".

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls bereit, die die Implementierungshilfsfunktion OnEditFindReplace aufruft, um die vorherigen Such-/Ersetzungseinstellungen in privaten Implementierungsvariablen zu verwenden und zu speichern. Die CFindReplaceDialog Klasse wird verwendet, um das Dialogfeld ohne Modus zum Anfordern des Benutzers zu verwalten.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_PASTE Fügt den aktuellen Inhalt der Zwischenablage ein.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls bereit, der die aktuellen Zwischenablagedaten kopiert, die den markierten Text durch ersetzen CEdit::Paste. Der Befehl ist deaktiviert, wenn in der Zwischenablage keine CF_TEXT vorhanden ist.

    COleClientDoc stellt lediglich einen Updatebefehls-UI-Handler für diesen Befehl bereit. Wenn die Zwischenablage kein einbettbares OLE-Element/-Objekt enthält, wird der Befehl deaktiviert. Sie sind für das Schreiben des Handlers für den tatsächlichen Befehl verantwortlich, um das eigentliche Einfügen auszuführen. Wenn Ihre OLE-Anwendung auch andere Formate einfügen kann, sollten Sie ihren eigenen Aktualisierungsbefehls-UI-Handler in Der Ansicht oder im Dokument bereitstellen (d. a. irgendwo vor COleClientDoc dem Routing des Befehlsziels).

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

    Verwenden Sie COleClientItem::CanPastezum Ersetzen der standardmäßigen OLE-Implementierung .

  • ID_EDIT_PASTE_LINK Fügt einen Link aus dem aktuellen Inhalt der Zwischenablage ein.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    COleDocument stellt lediglich einen Updatebefehls-UI-Handler für diesen Befehl bereit. Wenn die Zwischenablage kein verknüpftes OLE-Element/-Objekt enthält, wird der Befehl deaktiviert. Sie sind für das Schreiben des Handlers für den tatsächlichen Befehl verantwortlich, um das eigentliche Einfügen auszuführen. Wenn Ihre OLE-Anwendung auch andere Formate einfügen kann, sollten Sie ihren eigenen Aktualisierungsbefehls-UI-Handler in Der Ansicht oder im Dokument bereitstellen (d. a. irgendwo vor COleDocument dem Routing des Befehlsziels).

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

    Verwenden Sie COleClientItem::CanPasteLinkzum Ersetzen der standardmäßigen OLE-Implementierung .

  • ID_EDIT_PASTE_SPECIAL Fügt den aktuellen Inhalt der Zwischenablage mit Optionen ein.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren. MFC stellt dieses Dialogfeld nicht bereit.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_REPEAT Wiederholt den letzten Vorgang.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls bereit, um den letzten Suchvorgang zu wiederholen. Die privaten Implementierungsvariablen für die letzte Suche werden verwendet. Der Befehl ist deaktiviert, wenn keine Suche versucht werden kann.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_REPLACE Beginnt mit dem Ersetzungsvorgang, wird das Dialogfeld "Modusloses Ersetzen" angezeigt.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls bereit, die die Implementierungshilfsfunktion OnEditFindReplace aufruft, um die vorherigen Such-/Ersetzungseinstellungen in privaten Implementierungsvariablen zu verwenden und zu speichern. Die CFindReplaceDialog Klasse wird verwendet, um das Dialogfeld ohne Modus zu verwalten, das den Benutzer auffordert.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_SELECT_ALL Wählt das gesamte Dokument aus.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls bereit, der den gesamten Text im Dokument auswählt. Der Befehl ist deaktiviert, wenn kein Text zum Auswählen vorhanden ist.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_UNDO Rückgängigmachen des letzten Vorgangs.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    CEditView stellt eine Implementierung dieses Befehls mithilfe CEdit::Undovon . Der Befehl ist deaktiviert, wenn CEdit::CanUndo FALSE zurückgegeben wird.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_EDIT_REDO wiederholt den letzten Vorgang.

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für jede CViewabgeleitete Klasse implementieren.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_WINDOW_NEW Öffnet ein weiteres Fenster im aktiven Dokument.

    CMDIFrameWnd::OnWindowNew implementiert dieses leistungsstarke Feature mithilfe der Dokumentvorlage des aktuellen Dokuments, um einen anderen Frame zu erstellen, der eine andere Ansicht des aktuellen Dokuments enthält.

    Wie bei den meisten MDI-Menübefehlen (Multiple Document Interface, MDI) ist der Befehl deaktiviert, wenn kein aktives untergeordnetes MDI-Fenster vorhanden ist.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen. Wenn Sie einen Befehl bereitstellen möchten, der zusätzliche Ansichten oder Rahmenfenster erstellt, ist es wahrscheinlich besser, Ihren eigenen Befehl zu erfinden. Sie können den Code klonen CMDIFrameWnd::OnWindowNew und in den spezifischen Frame- und Ansichtsklassen Ihrer Vorliebe ändern.

  • ID_WINDOW_ARRANGE Ordnet Symbole am unteren Rand eines MDI-Fensters an.

    CMDIFrameWnd implementiert diesen Standard-MDI-Befehl in einer Implementierungshilfsfunktion OnMDIWindowCmd. Dieser Hilfsprogramm ordnet Befehls-IDs MDI-Windows-Nachrichten zu und kann daher viele Code freigeben.

    Wie die meisten MDI-Fenstermenübefehle ist der Befehl deaktiviert, wenn kein aktives untergeordnetes MDI-Fenster vorhanden ist.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_WINDOW_CASCADE Kaskadenfenster überlappen.

    CMDIFrameWnd implementiert diesen Standard-MDI-Befehl in einer Implementierungshilfsfunktion OnMDIWindowCmd. Dieser Hilfsprogramm ordnet Befehls-IDs MDI-Windows-Nachrichten zu und kann daher viele Code freigeben.

    Wie die meisten MDI-Fenstermenübefehle ist der Befehl deaktiviert, wenn kein aktives untergeordnetes MDI-Fenster vorhanden ist.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_WINDOW_TILE_HORZ Kachelfenster horizontal.

    Dieser Befehl wird wie ID_WINDOW_CASCADE implementiert CMDIFrameWnd , mit Ausnahme einer anderen MDI Windows-Nachricht, die für den Vorgang verwendet wird.

    Sie sollten die Standardkachelausrichtung für Ihre Anwendung auswählen. Dazu können Sie die ID für das Menüelement "Kachel" des Fensters in ID_WINDOW_TILE_HORZ oder ID_WINDOW_TILE_VERT ändern.

  • ID_WINDOW_TILE_VERT Fenster "Kacheln" vertikal aus.

    Dieser Befehl wird wie ID_WINDOW_CASCADE implementiert CMDIFrameWnd , mit Ausnahme einer anderen MDI Windows-Nachricht, die für den Vorgang verwendet wird.

    Sie sollten die Standardkachelausrichtung für Ihre Anwendung auswählen. Dazu können Sie die ID für das Menüelement "Kachel" des Fensters in ID_WINDOW_TILE_HORZ oder ID_WINDOW_TILE_VERT ändern.

  • ID_WINDOW_SPLIT Tastaturschnittstelle zum Teilen.

    CView behandelt diesen Befehl für die CSplitterWnd Implementierung. Wenn die Ansicht Teil eines Splitterfensters ist, wird dieser Befehl an die Implementierungsfunktion CSplitterWnd::DoKeyboardSplitdelegiert. Dadurch wird der Splitter in einem Modus platziert, in dem Tastaturbenutzer ein Splitterfenster teilen oder aufheben können.

    Dieser Befehl ist deaktiviert, wenn sich die Ansicht nicht in einem Teiler befindet.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_APP_ABOUT Ruft das Dialogfeld "Info" auf.

    Es gibt keine Standardimplementierung für das Feld "Info" einer Anwendung. Die von AppWizard erstellte Standardanwendung erstellt eine benutzerdefinierte Dialogklasse für Ihre Anwendung und verwendet sie als Infofeld. AppWizard schreibt auch den trivialen Befehlshandler, der diesen Befehl behandelt und das Dialogfeld aufruft.

    Sie werden diesen Befehl fast immer implementieren.

  • ID_APP_EXIT beenden Sie die Anwendung.

    CWinApp::OnAppExitbehandelt diesen Befehl, indem eine WM_CLOSE Nachricht an das Standard Fenster der Anwendung gesendet wird. Das Standardmäßige Herunterfahren der Anwendung (Aufforderung für modifiziert Dateien usw.) wird von der CFrameWnd Implementierung behandelt.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen. Überschreiben oder schließende CWinApp::SaveAllModified CFrameWnd Logik wird empfohlen.

    Wenn Sie diesen Befehl implementieren, empfehlen wir, diese Befehls-ID zu verwenden.

  • ID_HELP_INDEX Listet Hilfethemen aus . HLP-Datei.

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CWinAppabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    CWinApp::OnHelpIndex behandelt diesen Befehl durch einfaches Aufrufen CWinApp::WinHelp.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_HELP_USING Zeigt Hilfe zur Verwendung der Hilfe an.

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CWinAppabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    CWinApp::OnHelpUsing behandelt diesen Befehl durch einfaches Aufrufen CWinApp::WinHelp.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_CONTEXT_HELP Wechselt in den Hilfemodus UMSCHALT-F1 ein.

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CWinAppabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    CWinApp::OnContextHelp behandelt diesen Befehl, indem sie den Hilfemoduscursor festlegen, eine modale Schleife eingeben und darauf warten, dass der Benutzer ein Fenster auswählt, um Hilfe zu erhalten. Weitere Informationen zur MFC-Hilfeimplementierung finden Sie in technischem Hinweis 28 .

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_HELP Gibt Hilfe zum aktuellen Kontext

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CWinAppabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    CWinApp::OnHelp behandelt diesen Befehl, indem der richtige Hilfekontext für den aktuellen Anwendungskontext angezeigt wird. Dadurch werden einfache F1-Hilfe, Hilfe zu Meldungsfeldern usw. behandelt. Weitere Informationen zur MFC-Hilfeimplementierung finden Sie im Technischen Hinweis 28 .

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_DEFAULT_HELP Zeigt die Standardhilfe für Kontext an.

    Hinweis

    Sie müssen dies mit der Nachrichtenzuordnung Ihrer CWinAppabgeleiteten Klasse verbinden, um diese Funktionalität zu aktivieren.

    Dieser Befehl ist in der Regel zugeordnet CWinApp::OnHelpIndex.

    Ein anderer Befehlshandler kann bereitgestellt werden, wenn eine Unterscheidung zwischen der Standardhilfe und dem Hilfeindex gewünscht wird.

  • ID_NEXT_PANE Wechsel zum nächsten Bereich

    CView behandelt diesen Befehl für die CSplitterWnd Implementierung. Wenn die Ansicht Teil eines Splitterfensters ist, wird dieser Befehl an die Implementierungsfunktion CSplitterWnd::OnNextPaneCmddelegiert. Dadurch wird die aktive Ansicht in den nächsten Bereich im Teiler verschoben.

    Dieser Befehl ist deaktiviert, wenn sich die Ansicht nicht in einem Teiler befindet oder kein nächster Bereich angezeigt wird.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_PREV_PANE Wechsel zum vorherigen Bereich

    CView behandelt diesen Befehl für die CSplitterWnd Implementierung. Wenn die Ansicht Teil eines Splitterfensters ist, wird dieser Befehl an die Implementierungsfunktion CSplitterWnd::OnNextPaneCmddelegiert. Dadurch wird die aktive Ansicht in den vorherigen Bereich im Teiler verschoben.

    Dieser Befehl ist deaktiviert, wenn sich die Ansicht nicht in einem Teiler befindet oder es keinen vorherigen Bereich gibt, zu dem gewechselt werden soll.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_OLE_INSERT_NEW Fügt ein neues OLE-Objekt ein

    Derzeit gibt es keine Standardimplementierung für diesen Befehl. Sie müssen dies für die CViewabgeleitete Klasse implementieren, um ein neues OLE-Element/-Objekt an der aktuellen Auswahl einzufügen.

    Alle OLE-Clientanwendungen sollten diesen Befehl implementieren. AppWizard erstellt mit der OLE-Option eine Skelettimplementierung OnInsertObject in Ihrer Ansichtsklasse, die Sie abschließen müssen.

    Eine vollständige Implementierung dieses Befehls finden Sie im Beispiel für das MFC OLE-Beispiel für OCLIENT .

  • ID_OLE_EDIT_LINKS OLE-Verknüpfungen bearbeiten

    COleDocument behandelt diesen Befehl mithilfe der von MFC bereitgestellten Implementierung des Standardmäßigen OLE-Verknüpfungsdialogfelds. Auf die Implementierung dieses Dialogfelds wird über die COleLinksDialog Klasse zugegriffen. Wenn das aktuelle Dokument keine Verknüpfungen enthält, ist der Befehl deaktiviert.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_OLE_VERB_FIRST... LAST An ID range for OLE verbs

    COleDocument verwendet diesen Befehls-ID-Bereich für die Verben, die vom aktuell ausgewählten OLE-Element/-Objekt unterstützt werden. Dies muss ein Bereich sein, da ein bestimmter OLE-Element-/Objekttyp null oder mehr benutzerdefinierte Verben unterstützen kann. Im Menü Ihrer Anwendung sollten Sie über ein Menüelement mit der ID von ID_OLE_VERB_FIRST verfügen. Wenn das Programm ausgeführt wird, wird das Menü mit der entsprechenden Menüverbbeschreibung (oder Popupmenü mit vielen Verben) aktualisiert. Die Verwaltung des OLE-Menüs erfolgt AfxOleSetEditMenuim Update-Befehls-UI-Handler für diesen Befehl.

    Es gibt keine expliziten Befehlshandler für die Behandlung jeder Befehls-ID in diesem Bereich. COleDocument::OnCmdMsg wird überschrieben, um alle Befehls-IDs in diesem Bereich aufzufangen, sie in nullbasierte Verbnummern umzuwandeln und den Server für dieses Verb zu starten (mit COleClientItem::DoVerb).

    Anpassung oder andere Verwendung dieses Befehls-ID-Bereichs wird nicht empfohlen.

  • ID_VIEW_TOOLBAR Schaltet die Symbolleiste ein und aus.

    CFrameWnd behandelt diesen Befehl und den Updatebefehl-UI-Handler, um den sichtbaren Zustand der Symbolleiste umzuschalten. Die Symbolleiste muss ein untergeordnetes Fenster des Frames mit der untergeordneten Fenster-ID von AFX_IDW_TOOLBAR sein. Der Befehlshandler schaltet die Sichtbarkeit des Symbolleistenfensters tatsächlich um. CFrameWnd::RecalcLayout wird verwendet, um das Rahmenfenster mit der Symbolleiste im neuen Zustand neu zu zeichnen. Der Benutzeroberflächenhandler für den Updatebefehl überprüft das Menüelement, wenn die Symbolleiste sichtbar ist.

    Die Anpassung dieses Befehlshandlers wird nicht empfohlen. Wenn Sie zusätzliche Symbolleisten hinzufügen möchten, möchten Sie den Befehlshandler und den Ui-Handler für den Updatebefehl für diesen Befehl klonen und ändern.

  • ID_VIEW_STATUS_BAR Schaltet die Statusleiste ein und aus.

    Dieser Befehl wird wie ID_VIEW_TOOLBAR implementiert CFrameWnd , mit Ausnahme einer anderen untergeordneten Fenster-ID (AFX_IDW_STATUS_BAR) wird verwendet.

Nur Update-Befehlshandler

Mehrere Standardbefehls-IDs werden als Indikatoren in Statusleisten verwendet. Diese verwenden den gleichen Mechanismus für die Benutzeroberflächenbehandlung mit Aktualisierungsbefehlen, um den aktuellen visuellen Zustand während der Leerlaufzeit der Anwendung anzuzeigen. Da sie vom Benutzer nicht ausgewählt werden können (d. h. Sie können keinen Statusleistenbereich verschieben), ist es nicht sinnvoll, einen ON_COMMAND Handler für diese Befehls-IDs zu verwenden.

  • ID_INDICATOR_CAPS: FESTSTELLTASTE-Indikator.

  • ID_INDICATOR_NUM: NUM-Sperrindikator.

  • ID_INDICATOR_SCRL: SCRL-Sperrindikator.

  • ID_INDICATOR_KANA: KANA-Sperrindikator (gilt nur für japanische Systeme).

Alle drei dieser Elemente werden in CFrameWnd::OnUpdateKeyIndicatoreinem Implementierungshilfsprogramm implementiert, das die Befehls-ID verwendet, um dem entsprechenden virtuellen Schlüssel zuzuordnen. Eine gängige Implementierung aktiviert oder deaktiviert (für Statusbereiche deaktiviert = kein Text) das CCmdUI Objekt, je nachdem, ob der entsprechende virtuelle Schlüssel momentan gesperrt ist.

Die Anpassung dieses Befehlshandlers wird nicht empfohlen.

  • ID_INDICATOR_EXT: EXTended select indicator.

  • ID_INDICATOR_OVR : OVeRstrike Indikator.

  • ID_INDICATOR_REC: RECording-Indikator.

Derzeit gibt es keine Standardimplementierung für diese Indikatoren.

Wenn Sie sich dafür entscheiden, diese Indikatoren zu implementieren, empfehlen wir Ihnen, diese Indikator-IDs zu verwenden und die Reihenfolge der Indikatoren in Ihrer Statusleiste zu Standard (d. h. in dieser Reihenfolge: EXT, CAP, NUM, SCRL, OVR, REC).

Siehe auch

Technische Hinweise – nach Nummern geordnet
Technische Hinweise – nach Kategorien geordnet