Freigeben über


TN025: Dokument-, Ansichts- und Frameerstellung

Hinweis

Der folgende technische Hinweis wurde seit der ersten Aufnahme in die Onlinedokumentation nicht aktualisiert. Daher sind einige Prozeduren und Themen möglicherweise veraltet oder falsch. Für die neuesten Informationen empfiehlt es sich, nach dem interessanten Thema im Onlinedokumentationsindex 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 Hauptframefenster 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 Fenster, das als Hauptfenster des Anwendungsframes und als einziges Dokumentrahmenfenster dient. Bei mehreren Dokumentschnittstellen (MDI) handelt es sich um eine MDI-Frame (Klasse CMDIFrameWnd), die als Hauptfenster des Anwendungsrahmens 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 zu verwalten. 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 Hauptfenster, das den Clientbereich des Frames füllt.

Für ein MDI-Frame Fenster wird der Clientbereich mit dem MDICLIENT-Steuerelement gefüllt, das wiederum das übergeordnete Element aller MDI-Child Rahmenfenster ist. Bei einem SDI-Frame Fenster oder einem MDI-Child Rahmenfenster wird der Clientbereich in der Regel mit einem abgeleiteten CViewFensterobjekt 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 Nummer
Technische Hinweise nach Kategorie