MDI-Anwendung

Inhalt:

Schritt 1: Anwendungsgerüst
Schritt 2: Zweites Document

Ziel dieses Beispiels:
Statt einer "Single Document Interface"-Anwendung soll eine "Multi Document Interface"-Anwendung erstellt werden, die zwei Document-Klassen und zwei View-Klassen enthält.
Ein Document-View-Paar bildet das Malefiz-Spiel selbst, das andere Document-view-Paar ist der Spielfeld-Editor.
Hier gibt es das Beispiel zum Download: Malefiz.zip

Schritt 1: Anwendungsgerüst

Erstellen des Anwendungsgerüsts als "Mehrfaches Dokument"-Anwendung.
Mehrfaches Dokument
Im Unterpunkt "Dokumentvorlagen" passen wir die Default-Texte an, da diese in einer MDI-Anwendung eine größere Rolle spielen und deshalb aussagekräftig sein sollten. Ich habe im Beispiel "Hauptrahmenüberschrift", "Dokumenttypname" und "Neuer kurzer Dateiname" von "Malefiz" in "Malefiz-Spiel" angepaßt. Beim "Dokumenttypnamen" musste ich "Malefizspiel" nehmen, da der Bindestrich verboten ist.
Dokumentvorlagen
Im letzten Schritt "Generierte Klassen" habe ich View und Document von "CMalefiz..." in "CMalefizSpiel..." umbenannt.

Zusätzlich zu den bekannten Klassen aus der SDI-Anwendung wird jetzt eine Klasse "CChildFrame" erzeugt. Grund: vorher lag die View komplett im CMainFrame. Jetzt kann das Hauptfenster aber mehrere Views enthalten, die umschaltbar sind. Deshalb muss es einen neuen Container für die View geben, eben den ChildFrame.

Starten wir die Anwendung jetzt, so öffnet jeder Klick auf "Neu" ein neues, zusätzliches Fenster.


Schritt 2: Zweites Document

Wir fügen über Rechtsklick -> "Hinzufügen..." -> "Klasse" eine "MFC-Klasse" zu. Als Basisklasse wählen wir "CDocument".
CMalefizEditorDoc
Es wird eine neue View zugefügt (im Beispiel von CView abgeleitet):
CMalefizEditorView

Jetzt muss ein neues MultiDocument-Template in der Application-Klasse "CMalefizApp" zugefügt werden. Dazu in die Methode "InitInstance" gehen und nach der Erzeugung des Standard-Document-Templates folgendes einfügen:
	//Das zweite Document-Template zufügen:
	pDocTemplate = new CMultiDocTemplate(IDR_MalefizeditorTYPE,
		RUNTIME_CLASS(CMalefizEditorDoc),
		RUNTIME_CLASS(CChildFrame),
		RUNTIME_CLASS(CMalefizEditorView));
	if (!pDocTemplate)
		return FALSE;
	AddDocTemplate(pDocTemplate); 
Die Header-Dateien "CMalefizEditorDoc.h" und "CMalefizEditorView.h" müssen natürlich referenziert werden.

Der erste Parameter "IDR_MalefizeditorTYPE" gibt den Namen einer Resource an die die Anzeigetexte für das Template enthält und bisher noch nicht vorhanden ist.
Um sie anzulegen gehen wir in den Resourcenansicht und öffnen den "String Table":
String Table
Hier kopieren wir am einfachsten den String "IDR_MalefizspielTYPE" und modifizieren ihn. Die einzelnen Elemente des Strings entsprechen den Einstellunge die wir im Dialog "Dokumentvorlagen" beim Anlegen des Projekts angegeben haben. Die Werte aus den einzelnen Eingabefeldern sind durch "\n" getrennt. Ich habe den Wert im Beispiel so modifiziert:

\nMalefizeditor\nMalefiz-Editor\n\n\nMalefiz.Document\nMalefiz.Document

Starten wir die Anwendung jetzt kommt beim Start ein Dialog der uns die Auswahl des ersten zu öffnenden Dokuments anbietet.
Anwendungsstart


Wollen wir dem neuen Fenster ein schönes Icon geben müssen wir in der Resourcenansicht in der Sektion "Icon" ein neues Icon namens "IDR_MalefizeditorTYPE" anlegen. Im Beispiel habe ich das getan und meine ganze grafische Begabung hineinfließen lassen.

Stand 19.07.2006
Historie:
19.07.2006 Beispiel zugefügt