TN025: Dokument-, Ansicht- und Frame-Erstellung
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 Erstellungs- und Besitzprobleme für WinApps, DocTemplates, Dokumente, Frames und Ansichten beschrieben.
Winapp
Es gibt ein CWinApp
Objekt im System.
Sie wird statisch konstruiert und durch die interne Implementierung WinMain
des Frameworks initialisiert. Sie müssen von CWinApp
praktischen Aktionen abgeleitet werden (Ausnahme: MFC-Erweiterungs-DLLs sollten nicht über eine CWinApp
Instanz verfügen – stattdessen erfolgt DllMain
die Initialisierung).
Das ein CWinApp
Objekt besitzt eine Liste von Dokumentvorlagen (a CPtrList
). Pro Anwendung gibt es eine oder mehrere Dokumentvorlagen. DocTemplates werden in der Regel aus der Ressourcendatei (d. h. einem Zeichenfolgenarray) geladen CWinApp::InitInstance
.
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
Das ein CWinApp
Objekt besitzt alle Rahmenfenster in der Anwendung. Das Standard Framefenster für die Anwendung sollte gespeichert CWinApp::m_pMainWnd
werden. In der Regel legen Sie m_pMainWnd in der InitInstance
Implementierung fest, wenn Sie appWizard nicht für Sie ausführen lassen. Bei einer einzelnen Dokumentschnittstelle (Single Document Interface, SDI) handelt es sich um ein CFrameWnd
Dokumentfeldfenster, das als Standard Anwendungsrahmenfenster und als einziges Dokumentrahmenfenster dient. Für mehrere Dokumentschnittstellen (MDI) ist dies eine MDI-Frame (KlasseCMDIFrameWnd
), die als Standard Anwendungsframefenster dient, das alle untergeordneten CFrameWnd
Elemente enthält. Jedes untergeordnete Fenster ist von Klasse CMDIChildWnd
(abgeleitet von CFrameWnd
) und dient als eines der potenziell vielen Dokumentrahmenfenster.
DocTemplates
Dies CDocTemplate
ist der Ersteller und Manager von Dokumenten. Sie besitzt die von ihr erstellten Dokumente. Wenn Ihre Anwendung den unten beschriebenen ressourcenbasierten Ansatz verwendet, muss sie nicht von CDocTemplate
.
Bei einer SDI-Anwendung verfolgt die Klasse CSingleDocTemplate
ein geöffnetes Dokument. Bei einer MDI-Anwendung behält die Klasse CMultiDocTemplate
eine Liste (a CPtrList
) aller aktuell geöffneten Dokumente bei, die aus dieser Vorlage erstellt wurden. CDocTemplate::AddDocument
und CDocTemplate::RemoveDocument
stellen Sie die virtuellen Memberfunktionen zum Hinzufügen oder Entfernen eines Dokuments aus der Vorlage bereit. CDocTemplate
ist ein Freund davon CDocument
, damit wir den geschützten CDocument::m_pDocTemplate
Rückzeiger so festlegen können, dass er auf die Dokumentvorlage zurückzeigert, die das Dokument erstellt hat.
CWinApp
behandelt die Standardimplementierung OnFileOpen
, die wiederum alle Dokumentvorlagen abfragt. Die Implementierung umfasst die Suche nach bereits geöffneten Dokumenten und entscheiden, in welchem Format neue Dokumente geöffnet werden sollen.
CDocTemplate
verwaltet die UI-Bindung für Dokumente und Frames.
CDocTemplate
behält die Anzahl der nicht benannten Dokumente bei.
Cdocument
A CDocument
gehört zu einem CDocTemplate
.
Dokumente verfügen über eine Liste der aktuell geöffneten Ansichten (abgeleitet von CView
), die das Dokument anzeigen (a CPtrList
).
Dokumente erstellen/zerstören die Ansichten nicht, aber sie werden nach der Erstellung aneinander angefügt. Wenn ein Dokument geschlossen wird (d. h. über "Datei/Schließen"), werden alle angefügten Ansichten geschlossen. Wenn die letzte Ansicht eines Dokuments geschlossen ist (d. h. Fenster/Schließen), wird das Dokument geschlossen.
Die CDocument::AddView
Schnittstelle wird RemoveView
verwendet, um die Ansichtsliste Standard zu enthalten. CDocument
ist ein Freund von CView
, von dem wir den CView::m_pDocument
Rückzeiger setzen können.
CFrameWnd
A CFrameWnd
(auch als Frame bezeichnet) spielt dieselbe Rolle wie in MFC 1.0, aber jetzt ist die CFrameWnd
Klasse so konzipiert, dass sie in vielen Fällen verwendet werden kann, ohne eine neue Klasse ableiten zu müssen. Die abgeleiteten Klassen CMDIFrameWnd
und CMDIChildWnd
werden ebenfalls erweitert, sodass viele Standardbefehle bereits implementiert sind.
Dies CFrameWnd
ist für das Erstellen von Fenstern im Clientbereich des Frames verantwortlich. Normalerweise gibt es ein Standard Fenster, das den Clientbereich des Frames ausfüllt.
Für ein MDI-Frame-Fenster wird der Clientbereich mit dem MDICLIENT-Steuerelement gefüllt, das wiederum das übergeordnete Element aller MDI-Untergeordneten Rahmenfenster ist. Bei einem SDI-Frame-Fenster oder einem MDI-Untergeordneten Rahmenfenster wird der Clientbereich in der Regel mit einem CView
-abgeleiteten Fensterobjekt gefüllt. Im Fall von CSplitterWnd
, der Clientbereich der Ansicht wird mit dem CSplitterWnd
Fensterobjekt gefüllt, und die CView
-abgeleiteten Fensterobjekte (ein pro geteilter Bereich) werden als untergeordnete Fenster der CSplitterWnd
.
Siehe auch
Technische Hinweise – nach Nummern geordnet
Technische Hinweise – nach Kategorien geordnet