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 WinMaindes 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_pMainWndwerden. 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 CFrameWndElemente 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::AddViewSchnittstelle 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