Alternativen zur Dokument-/Ansichtarchitektur
MFC-Anwendungen verwenden normalerweise die Dokument-/Ansichtsarchitektur, um Informationen, Dateiformate und die visuelle Darstellung von Daten für Benutzer zu verwalten. Bei den meisten Desktopanwendungen ist die Dokument-/Ansichtsarchitektur eine geeignete und effiziente Anwendungsarchitektur. Diese Architektur trennt Daten von der Anzeige und vereinfacht in den meisten Fällen Ihre Anwendung und reduziert redundanten Code.
Die Dokument-/Ansichtsarchitektur ist jedoch für einige Situationen nicht geeignet. Sehen Sie sich die folgenden Beispiele an:
Wenn Sie eine anwendung portieren, die in C für Windows geschrieben wurde, sollten Sie den Port abschließen, bevor Sie Ihrer Anwendung Dokument-/Ansichtsunterstützung hinzufügen.
Wenn Sie ein einfaches Hilfsprogramm schreiben, stellen Sie möglicherweise fest, dass Sie ohne die Dokument-/Ansichtsarchitektur vorgehen können.
Wenn Ihr ursprünglicher Code bereits die Datenverwaltung mit der Datenanzeige kombiniert, lohnt sich das Verschieben des Codes in das Dokument-/Ansichtsmodell nicht den Aufwand, da Sie die beiden trennen müssen. Möglicherweise möchten Sie den Code wie folgt belassen.
Wenn Sie eine Anwendung erstellen möchten, die die Dokument-/Ansichtsarchitektur nicht verwendet, deaktivieren Sie das Kontrollkästchen " Dokument-/Ansichtsarchitektur" in Schritt 1 des MFC-Anwendungs-Assistenten. Weitere Informationen finden Sie im MFC-Anwendungs-Assistenten .
Hinweis
Dialogbasierte Anwendungen, die vom MFC-Anwendungs-Assistenten erstellt werden, verwenden nicht die Dokument-/Ansichtsarchitektur, sodass das Kontrollkästchen " Dokument-/Ansichtsarchitektur" deaktiviert ist, wenn Sie den Dialogfeldanwendungstyp auswählen.
Die Visual C++-Assistenten sowie die Quell- und Dialog-Editoren arbeiten mit der generierten Anwendung genauso wie bei jeder anderen vom Assistenten generierten Anwendung. Die Anwendung kann Symbolleisten, Bildlaufleisten und eine Statusleiste unterstützen und verfügt über ein Infofeld. Ihre Anwendung registriert keine Dokumentvorlagen und enthält keine Dokumentklasse.
Beachten Sie, dass ihre generierte Anwendung eine Ansichtsklasse aufweist, CChildView
die von CWnd
. MFC erstellt und positioniert eine Instanz der Ansichtsklasse innerhalb der Framefenster, die von Ihrer Anwendung erstellt wurden. MFC erzwingt weiterhin die Verwendung eines Ansichtsfensters, da die Positionierung und Verwaltung der Inhalte der Anwendung vereinfacht wird. Sie können dem OnPaint
Element dieser Klasse Zeichencode hinzufügen. Ihr Code sollte der Ansicht Bildlaufleisten anstelle des Frames hinzufügen.
Da die von MFC bereitgestellte Dokument-/Ansichtsarchitektur für die Implementierung vieler grundlegender Features einer Anwendung verantwortlich ist, bedeutet die Abwesenheit in Ihrem Projekt, dass Sie für die Implementierung vieler wichtiger Features Ihrer Anwendung verantwortlich sind:
Wie vom MFC-Anwendungs-Assistenten bereitgestellt, enthält das Menü für Ihre Anwendung nur die Befehle "Neu " und "Beenden " im Menü "Datei ". (Die Neuer Befehl wird nur für MDI-Anwendungen unterstützt, nicht für SDI-Anwendungen ohne Dokument-/Ansichtsunterstützung.) Die generierte Menüressource unterstützt keine MRU-Liste (zuletzt verwendet).
Sie müssen Handlerfunktionen und Implementierungen für alle Befehle hinzufügen, die Ihre Anwendung unterstützt, einschließlich "Öffnen " und "Speichern " im Menü "Datei ". MFC bietet normalerweise Code zur Unterstützung dieser Features, aber diese Unterstützung ist eng an die Dokument-/Ansichtsarchitektur gebunden.
Die Symbolleiste für Ihre Anwendung, wenn Sie eine angefordert haben, ist minimal.
Es wird dringend empfohlen, den MFC-Anwendungs-Assistenten zum Erstellen von Anwendungen ohne die Dokument-/Ansichtsarchitektur zu verwenden, da der Assistent eine korrekte MFC-Architektur garantiert. Wenn Sie jedoch die Verwendung des Assistenten vermeiden müssen, finden Sie hier mehrere Ansätze zum Umgehen der Dokument-/Ansichtsarchitektur in Ihrem Code:
Behandeln Sie das Dokument als nicht verwendete Anfüge und implementieren Sie ihren Datenverwaltungscode in der Ansichtsklasse, wie oben beschrieben. Der Aufwand für das Dokument ist relativ gering. Ein einzelnes CDocument-Objekt verursacht selbst einen geringen Mehraufwand sowie den kleinen Mehraufwand der
CDocument
Basisklassen CCmdTarget und CObject. Beide Klassen sind klein.Deklariert in
CDocument
:Zwei
CString
Objekte.Drei BOOLs.
Ein
CDocTemplate
Zeiger.Ein
CPtrList
Objekt, das eine Liste der Ansichten des Dokuments enthält.
Darüber hinaus erfordert das Dokument die Zeit zum Erstellen des Dokumentobjekts, seiner Ansichtsobjekte, eines Rahmenfensters und eines Dokumentvorlagenobjekts.
Behandeln Sie sowohl das Dokument als auch die Ansicht als nicht verwendete Anfüge. Platzieren Sie den Datenverwaltungs- und Zeichnungscode nicht in der Ansicht, sondern im Framefenster. Dieser Ansatz ist näher am Programmiermodell der C-Sprache.
Überschreiben Sie die Teile des MFC-Frameworks, die das Dokument erstellen und anzeigen, um die Erstellung überhaupt zu vermeiden. Der Dokumenterstellungsprozess beginnt mit einem Aufruf von
CWinApp::AddDocTemplate
. Entfernen Sie diesen Aufruf aus der Memberfunktion Ihrer AnwendungklasseInitInstance
, und erstellen Sie stattdessen ein Framefenster inInitInstance
sich selbst. Platzieren Sie Ihren Datenverwaltungscode in Ihrer Framefensterklasse. Der Dokument-/Ansichtserstellungsprozess wird in der Dokument-/Ansichtserstellung veranschaulicht. Dies ist mehr Arbeit und erfordert ein tieferes Verständnis des Frameworks, aber es befreit Sie vollständig vom Dokument-/Ansichtsaufwand.
Der Artikel MFC: Verwenden von Datenbankklassen ohne Dokumente und Ansichten bietet konkretere Beispiele für Dokument-/Ansichtsalternativen im Kontext von Datenbankanwendungen.