Die CFrameWnd -Klasse stellt die Funktionalität eines Windows single Document Interface (SDI) überlappt oder Pop-up-Rahmenfenster, zusammen mit den Mitgliedern für die Verwaltung des Fensters.
Um eine nützliche Rahmenfenster für Ihre Anwendung zu erstellen, leiten Sie eine Klasse von CFrameWnd. Fügen Sie Membervariablen der abgeleiteten Klasse zum Speichern von Daten, die spezifisch für Ihre Anwendung. Message Handler-Memberfunktionen implementieren und eine Nachricht Karte in der abgeleiteten Klasse angeben, was geschieht, wenn Nachrichten an das Fenster gerichtet sind.
Es gibt drei Möglichkeiten, ein Frame-Fenster erstellen:
Erstellen Sie indirekt mithilfe einer Dokumentvorlage.
Bevor Sie entweder Erstellen oder LoadFrameaufrufen, müssen Sie das Frame-Fenster-Objekt auf dem Heap mit den new -Operator von C++ erstellen. Vor dem Aufruf Erstellen, können Sie auch eine Fensterklasse mit globalen Funktion ist Symbol und Klasse Formatvorlagen für den Frame festlegen registrieren.
Verwenden Sie die Create -Memberfunktion die Frame-Erstellungsparameter als unmittelbare Argumente übergeben.
LoadFrame erfordert weniger Argumente als Erstellen, und ruft stattdessen die meisten seinen Standardwerten von Ressourcen, einschließlich des Rahmens Beschriftung, Symbol, Zugriffstastentabelle und Menü. Um LoadFrameerreichbar zu sein, müssen alle diese Mittel die gleiche Ressource-ID (z. B. IDR_MAINFRAME).
Wenn ein CFrameWnd -Objekt Ansichten und Dokumente enthält, werden sie indirekt durch das Framework anstelle von direkt vom Programmierer erstellt. Das CDocTemplate -Objekt steuert die Schaffung des Rahmens, die Schaffung der enthaltenden Ansichten, und die Verbindung von den Ansichten des entsprechenden Dokuments. Die Parameter des Konstruktors CDocTemplate geben CRuntimeClass der drei Klassen beteiligt (Dokument, Frame und Ansicht). Ein CRuntimeClass -Objekt wird vom Framework verwendet, um dynamisch neue Frames vom Benutzer angegeben (z. B. mithilfe der Befehl Datei neu oder mehrere Dokument Interface (MDI) Fenster Befehls neu) erstellen.
Eine von CFrameWnd abgeleitete Klasse Rahmenfenster muss in Reihenfolge für die oben genannten RUNTIME_CLASS Mechanismus ordnungsgemäß funktioniert mit DECLARE_DYNCREATE deklariert werden.
Ein CFrameWnd enthält Standardimplementierungen für die folgenden Funktionen ein Hauptfenster in einer typischen Anwendung für Windows:
Ein Rahmenfenster CFrameWnd verfolgt der eine derzeit aktive Ansicht, die unabhängig von der aktive Windows-Fenster oder den aktuellen Eingabefokus. Wenn der Frame reaktiviert wird, wird die aktive Ansicht benachrichtigt, durch Aufrufen von CView::OnActivateView.
Befehlsmeldungen und viele gemeinsame Frame-Benachrichtigungen, einschließlich der von den OnSetFocusOnHScrollund OnVScroll Funktionen von CWnd, behandelt werden durch ein CFrameWnd -Rahmenfenster, die derzeit aktive Ansicht delegiert.
Die derzeit aktive Ansicht (oder momentan aktive untergeordnete MDI-Frame Fenster für ein MDI-Frame) bestimmen die Beschriftung des Rahmenfensters. Diese Funktion kann deaktiviert werden, indem Sie deaktivieren das FWS_ADDTOTITLE -Formatbit des Rahmenfensters.
Ein CFrameWnd -Rahmenfenster verwaltet die Positionierung von den Steuerleisten, Ansichten und andere untergeordnete Fenster im Clientbereich des Rahmenfensters. Ein Rahmenfenster hat auch Leerlaufzeit Symbolleiste und andere Steuerelement-Schaltflächen aktualisieren. Ein CFrameWnd -Rahmenfenster hat auch Standardimplementierungen von Befehlen zum ein- und Ausschalten der Symbolleiste und Statusleiste Bar umschalten.
Ein CFrameWnd -Rahmenfenster verwaltet die Hauptmenüleiste. Wenn ein Popup-Menü angezeigt wird, verwendet das Frame-Fenster den UPDATE_COMMAND_UI -Mechanismus um zu bestimmen, welche Menüelemente aktiviert, deaktiviert oder aktiviert werden sollte. Wenn der Benutzer ein Menüelement auswählt, aktualisiert das Rahmenfenster die Statusleiste mit der Meldungszeichenfolge für diesen Befehl.
Ein CFrameWnd -Rahmenfenster hat eine optionale Zugriffstastentabelle, die Zugriffstasten automatisch übersetzt.
Ein CFrameWnd -Rahmenfenster hat ein optionales Hilfenummer mit LoadFrame festgelegt, die für die kontextbezogene Hilfe verwendet wird. Ein Frame-Fenster ist die wichtigste Orchestrator Semimodale Staaten wie kontextbezogene Hilfe (Umschalt + F1) und Seitenansicht Modus.
Ein Rahmenfenster CFrameWnd öffnet eine Datei aus dem Datei-Manager und Ablegen auf der Frame-Fenster. Wenn eine Dateierweiterung registriert und mit der Anwendung verbunden ist, reagiert das Rahmenfenster, die dynamic Data Exchange (DDE) Anforderung zu öffnen, die auftritt, wenn der Benutzer öffnet eine Datei im Datei-Manager oder die Windows-Funktion ShellExecute aufgerufen wird.
Wenn das Frame-Fenster das Hauptanwendungsfenster angezeigt (d. h. CWinThread::m_pMainWnd) ist, fordert wenn der Benutzer die Anwendung, die Frame-Fenster schließt den Benutzer auf alle geänderten Dokumente speichern (für OnClose und OnQueryEndSession).
Wenn das Frame-Fenster das Hauptanwendungsfenster angezeigt ist, ist das Frame-Fenster den Kontext für die Ausführung von WinHelp. WINHELP heruntergefahren wird das Frame-Fenster schließen.EXE, wenn es um Hilfe für diese Anwendung gestartet wurde.
Verwenden Sie nicht den C++ Löschen Operator ein Rahmenfenster zu zerstören. Verwenden Sie stattdessen CWnd::DestroyWindow . Durchführungder CFrameWndPostNcDestroy wird das C++-Objekt löschen, wenn das Fenster zerstört wird. Wenn der Benutzer das Frame-Fenster schließt, wird der Standardhandler OnCloseDestroyWindow aufrufen.
Weitere Informationen über CFrameWnd, finden Sie unter Frame Fenster Themen im Visual C++ Programmer's Guide.