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.
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.
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".
Es wird eine neue View zugefügt (im Beispiel von CView abgeleitet):
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":
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.
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