Templateklasse

Die Verknüpfung eines Dokuments mit seinen Ansichten erfolgt durch die Dokumentenverwaltung. Die Dokumentenverwaltung wird durch die MFC Klasse CDocTemplate realisiert. Eine Anwendung verwendet jedoch nicht diese Basisklasse selbst, sondern je nach Anwendungsart entweder die davon abgeleitete Klasse CSingleDocTemplate oder CMultiDocTemplate. CSingleDocTemplate wird innerhalb von SDI-Anwendungen eingesetzt und erlaubt das Erstellen eines Dokuments mit beliebig vielen Ansichten zu einer Zeit. Die Klasse CMultiDocTemplate dagegen kann mehrere Dokumente, einschließlich deren Ansichten, gleichzeitig verwalten. Da wir im Augenblick nur SDI-Anwendungen erstellen, wird die Beschreibung der Klasse CMultiDocTemplate auf später verschoben, bis zur der Behandlung von MDI-Anwendungen.

Die Dokumentenverwaltung wird in der Regel innerhalb der Methode InitInstance(...) des Anwendungsobjektes erstellt. Das Anwendungsobjekt speichert einen Zeiger auf jede erstellte Dokumentenverwaltung. Sehen wir uns dies innerhalb unseres bisherigen Beispiels einmal an:

Falls noch nicht geschehen, öffnen Sie das Beispielprojekt DVBasis aus der vorherigen Lektion. Führen Sie in der Klassenansicht einen Doppelklick auf die InitInstance(...) Methode der Klasse CDVBasisApp aus um sie im Editorfenster anzuzeigen:
BOOL CDVBasisApp::InitInstance()
{
    TRACE("Beginn InitInstance()\n");
    ....
    // Dokumentvorlagen der Anwendung registrieren. Dokumentvorlagen
    // dienen als Verbindung zwischen Dokumenten, Rahmenfenstern und Ansichten.

    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(CDVBasisDoc),
        RUNTIME_CLASS(CMainFrame), // Haupt-SDI-Rahmenfenster
        RUNTIME_CLASS(CDVBasisView));
    AddDocTemplate(pDocTemplate);

    // Befehlszeile parsen, um zu prüfen auf Standard-Umgebungsbefehle DDE, Datei offen
   ....
}

Im obigen Listing sind die nun näher zu betrachtenden Anweisungen farblich hervorgehoben. Als erstes wird ein CSingleDocTemplate Zeiger definiert da unser Beispiel eine SDI-Anwendung ist. Anschließend wird durch den Aufruf des Konstruktors der CSingleDocTemplate Klasse ein Dokumentenverwaltungsobjekt erstellt.

Sehen wir uns die Parameter des Konstruktor einmal näher an. Als erstes erfolgt die Spezifikation der mit dem Dokument verbundenen Ressourcen. Alle Ressourcen, die die hier angegebene ID IDR_MAINFRAME besitzen, werden dem zu erstellenden Dokument zugeordnet.

Sehen wir uns die vom Anwendungs-Assistenten erzeugten Ressourcen einmal an. Wechseln Sie dazu im Arbeitsbereich von der Klassenansicht zur Ressourcen-Ansicht.

Die Ressourcen des Beispiels

Der Assistent hat für das Beispiel-Dokument automatisch folgende Ressourcen erstellt: eine Accelerator-Table (Schnellzugriffstasten), ein Icon und ein Menü. D.h. jedes Dokument besitzt seine eigene Accelerator-Table, sein eigenes Icon und sein eigenes Menü. Mehr zu diesen Ressourcen im später im Kurs.

Eine weitere, nicht sofort erkennbare, wichtige Ressource befindet sich in der String Table Ressource. Öffnen Sie diese Ressource einmal durch einen Doppelklick auf den Eintrag Zeichenfolgetabelle. Unter der ID IDR_MAINFRAIME werden Sie folgenden String finden:

DVBasis\n\nDVBasi\n\n\nDVBasis.Document\nDVBasi Document

Dieser String besteht aus bis zu 7 Sub-Strings, die durch das Zeichen '\n' voneinander getrennt werden. Der erste Sub-String enthält den Fenstertitel, hier im Beispiel "DVBasis". Danach folgt der Dokumentenname. Im Beispiel ist dieser Sub-String leer und es wird als Dokumentenname "unbekannt" eingesetzt. Als nächstes folgt der Dokumenttyp und danach der Dateityp, der im Dialog Datei-Öffnen... angezeigt wird. Der nächste Sub-String enthält die Standard Dateierweiterung für die Dokumentendatei. Die beiden letzen Sub-Strings bezeichnen Einträge in der Registrierungsdatenbank. Die in dieser String-Ressource abgelegten Daten werden bei der Erstellung des Projektes spezifizieren. Wenn Sie nicht mehr wissen wo, klicken Sie einmal hier!

Kehren wir wieder zum Konstruktor der Klasse CSingleDocTemplate zurück. Die restlichen drei Parameter sind Zeiger auf Strukturen vom Typ CRuntimeClass. Die Klasse CRuntimeClass enthält die Laufzeitformationen für die entsprechende MFC Klasse. Diese Laufzeitinformationen werden durch die in den vorherigen Lektionen behandelten Makros DECLARE_DYNCREATE(...) bzw. IMPLEMENT_DYNCREATE(...) einer MFC Klasse hinzugefügt. Das durch den Anwendungs-Assistenten im Konstruktor eingefügte Makro RUNTIME_CLASS(...) liefert einen Zeiger auf eine statische Methode der Klasse CRuntimeClass zurück. Diese Methode erzeugt während der Erstellungsphase des Dokuments die notwendige Klasse für die Laufzeitinformation. Wie aus den Parametern, und dem eingefügten Kommentar, entnommen werden kann, verknüpft die Dokumentverwaltung das Dokument mit dem Rahmenfenster und den Ansichtsobjekten.

Zum Schluss wird die erzeugte Dokumentenverwaltung mittels der CWinApp-Methode AddDocTemplate(...) zur Applikation hinzugefügt.

Und das war's auch schon! Damit beenden wir die Einführung des Dokumentenverwaltung und wenden uns in der nächsten Lektion dem Zusammenspiel aller bisherigen Komponenten im Überblick zu.



Copyright © 2004

Senden Sie Emails mit Fragen oder Kommentaren zu dieser Website an: mailto:info@cpp-tutor.de
 Wolfgang Schröder, Lerchenweg 23, D-72805 Lichtenstein. Tel: +49 7129 6470