Applikationsklasse

Zurück Zum Inhaltsverzeichnis Weiter

Wie Sie bereits erfahren haben besitzt jedes WINDOWS Programm als Einsprungsfunktion die Funktion WinMain(...). Und dies gilt natürlich auch für ein MFC-Programm, nur dass diese Funktion jetzt innerhalb der MFC definiert ist. Des weiteren wissen Sie schon aus der vorherigen Lektion, dass das Rahmenprogramm der MFC in der Klasse CWinApp gekapselt ist.  Sie können sich nun eine Kurzübersicht der Klasse CWinApp ansehen um einen Überblick über die wichtigsten Eigenschaften dieser Klasse zu erhalten.

Jedes MFC Programm muss eine von CWinApp abgeleitete Klasse deklarieren und ein entsprechendes globales Objekt definieren. Durch diese globale Definition des Objektes wird dessen Konstruktor (und der der übergeordneten Klasse CWinApp ) noch ausgeführt bevor die WinMain(...) Funktion im MFC-Rahmen aufgerufen wird. Dadurch erhält das Objekt die Möglichkeit seine Daten vor dem Eintritt in die WinMain(...) Funktion zu initialisieren. Die WinMain(...) Funktion im MFC-Rahmen (eigentlich heißt die Funktion AfxWinMain(...)) ruft nach der Initialisierungsphase irgendwann die Methode InitInstance(...) des Anwendungsobjektes auf. Und innerhalb dieser Methode wird dann das Hauptfenster der Anwendung erstellt.

Sie müssen immer die Methode InitInstance(...) überschreiben um das Hauptfenster der Anwendung zu erstellen. Die Standardimplementierung der Methode erstellt kein Fenster!

Im einfachsten Fall wird innerhalb der InitInstance(...) Methode ein CFrameWnd Objekt dynamisch (d.h. mittels new Operators) erstellt und der Zeiger auf dieses Objekt der Membervariable m_pMainWnd des Anwendungsobjektes zugewiesen. Diese Membervariable m_pMainWnd stellt die Verbindung zwischen dem Anwendungsobjekt und dem Objekt des Hauptfensters her. In der Regel wird anstelle eines 'direkten' CFrameWnd Objektes ein Objekt einer eigenen, von CFrameWnd abgeleiteten Klasse als Hauptfensterobjekt eingesetzt. Dadurch erhält die Anwendung die Möglichkeit das Hauptfenster entsprechend ihren Anforderungen anzupassen. Mehr zum Erstellen des Fensters in der nächsten Lektion.

In der nachfolgenden Übung erweitern wir ein vorgegebenes Projekt. Wenn Sie wissen wollen wie MFC Programme ohne Anwendungs-Assistent erstellt werden können, so klicken Sie einfach hier.

So, genug der Theorie. Steigen wir in die Praxis ein. Auch wenn wir zum jetzigen Zeitpunkt noch kein vollständiges MFC-Programm erstellen können, uns fehlt noch die Behandlung der Fensterklasse, so erfahren Sie jedoch etwas über die Arbeitsweise des Klassen-Assistenten im Visual Studio. Der Klassen-Assistent wird immer dann eingesetzt wenn neue Klassen zu einem Projekt hinzugefügt werden sollen. Sie könnten dies auch manuell durchführen, jedoch erleichtert der Klassen-Assistent Ihnen hier die Arbeit wesentlich.

Kopieren Sie aus dem Programmverzeichnis das Projekt 99Templates\MFCBasis in Ihr Arbeitsverzeichnis. Starten Sie das Visual Studio durch einen Doppelklick auf die Datei MFCBasis.dsw. Bei der Installation des Visual Studios wurde diese Projektdatei automatisch mit dem Visual Studio verknüpft. Öffnen Sie nun im Arbeitsbereich einmal die Dateiansicht und dann alle darin befindlichen Ordner.

Wenn Sie die Dateiansicht geöffnet haben sollten Sie folgende Darstellung erhalten:

Die Ausgangsdateien des 1. MFC-Projekts

Wie Sie der Darstellung entnehmen können, enthält das Projekt zwei Quellcodedateien MFCBasis.cpp und StdAfx.cpp sowie eine Header-Datei StdAfx.h. Die Dateien StdAfx.? dienen zum Einbinden der für ein MFC-Programm notwendigen Header-Dateien.

Führen Sie jetzt einen Doppelklick auf die Datei MFCBasis.cpp aus um deren Inhalt anzuschauen.

Die Datei MFCBasis.cpp ist fast noch leer. Die einzige Anweisung zum jetzigen Zeitpunkt besteht aus dem Einbinden der Header-Datei StdAfx.h.

So, fügen wir zu unserem Projekt nun die Anwendungsklasse mit Hilfe des Klassen-Assistenten hinzu.

Wechseln Sie im Arbeitsbereich zurück auf die Klassenansicht. Klicken Sie dann mit der rechten Maustaste den Eintrag MFCBasis Klassen an und wählen aus dem eingeblendeten Kontextmenü den Eintrag Neue Klasse aus. Daraufhin wird folgender Dialog eingeblendet:

Ein Klasse zur Anwendung hinzufügen

Geben Sie im Feld Name den Namen der neuen Klasse ein. Wählen Sie für das Beispiel den Namen CMyApp. Nun muss noch die Basisklasse für unsere neue Anwendungsklasse definiert werden. Führen Sie einen Doppelklick im Feld Abgeleitet von durch und geben dann als Basisklasse CWinApp ein. Zum Schluss wird noch das Zugriffsrecht im Feld Als spezifiziert. Leiten Sie die neuen Klasse public von der Basisklasse ab. Drücken Sie aber noch nicht dem OK Button!

Sehen Sie sich jetzt einmal den Inhalt des Feldes Dateiname an. Der Klassen-Assistent legt die Deklaration der Klasse und die Definitionen der Methoden in getrennten Dateien ab deren Namen hier ausgegeben werden. Standardmäßig erhalten die Dateien den Namen der Klasse, aber ohne den führenden Klassenpräfix C. Wenn Ihnen die vorgegebenen Dateinamen nicht gefallen, können Sie diese durch drücken des Buttons Ändern... abändern.

Klicken Sie jetzt den OK Button an um den Dialog zu schließen. Den darauf hin eingeblendeten Hinweis, dass der Klassen-Assistent die Headerdatei für die Klasse nicht finden konnte, schließen Sie über den OK-Button.

Sehen wir uns an, was der Klassen-Assistent erstellt hat. Wenn Sie jetzt in der Klassenansicht den Klassenbaum öffnen sollten Sie folgende Darstellung erhalten:

Neue Klasse CMyApp

Der Assistent hat unserer neuen Klasse automatisch einen Konstruktor und einen Destruktor hinzugefügt. Sie können nun durch einen Doppelklick auf eine der Methoden in der Klassenansicht sich die Implementierung der Methode im Editorfenster ansehen. In unserem Fall sind sowohl der Konstruktor wie auch der Destruktor noch leer.

Wechseln Sie jetzt zur Dateiansicht und öffnen dort wiederum alle Ordner.

Neue Dateien MyApp.cpp und MyApp.h

Wenn Sie vorhin alles richtig eingegeben haben so wurden zum Projekt zwei neue Dateien hinzugefügt: die Datei MyApp.h mit der Klassendeklaration und die Datei MyApp.cpp mit den Definitionen der Methoden. Auch hier können Sie sich wieder durch einen Doppelklick auf eine Datei diese im Editorfenster öffnen.

Fügen wir zum Schluss noch die zu überschreibende Methode InitInstance(...) zu unserer Anwendungsklasse hinzu. Und auch hierfür werden wir wieder den Klassen-Assistenten einsetzen.

Gehen Sie zurück zur Klassenansicht. Klicken Sie mit der rechten Maustaste die Klasse CMyApp an. Im dann eingeblendeten Kontextmenü wählen Sie den Eintrag Member-Funktion hinzufügen... aus. Folgender Dialog wird daraufhin angezeigt:

Member-Funktion hinzufügen

Über diesen Dialog können Sie eigene Member-Funktionen (Methoden, Schnittstellen) zur Klasse hinzufügen. Geben Sie die oben angegebenen Eingaben ein. Beachten Sie auch den Zugriffsstatus! Nach dem Drücken des OK Buttons wird dann die Methode InitInstance(...) zur Klasse hinzugefügt. Der Klassen-Assistent trägt dabei zum einen die Deklaration der Methode in die Klasse ein und definiert gleichzeitig auch die Methode. Sie können sich die Definition der Methode ansehen wenn Sie jetzt im Klassenbaum einen Doppelklick auf die Methode durchführen.

Damit ist unsere Anwendungsklasse fertig definiert. Die Methode InitInstance(...) werden wir in der nächsten Lektion vervollständigen wenn wir das Hauptfenster für unsere Anwendung definieren.

Was zum Schluss jetzt noch übrig bleibt ist die Definition des Anwendungsobjektes. Wie Sie bereits erfahren haben muss jede MFC-Anwendung ein globales Anwendungsobjekt definieren.

Wechseln Sie in die Dateiansicht und klicken dort die Datei MFCBasis.cpp an. Erweitern Sie den Code dann wie folgt:
//
// Headerdateien
// -------------
#include "stdafx.h"


#include "MyApp.h"
// Unsere Anwendung!
CMyApp    theApp;

Beachten Sie bitte die Bedeutung der Schriftfarben bzw. -formen. Die schwarzen kursiven Anweisungen sollten in der Anwendung bereits vorhanden sein. Sie müssen zum bestehenden Code nur die braunen und blauen Anweisungen (die in Normalschrift) hinzufügen. Im obigen Beispiel sind dies also die Zeilen

#include "MyApp.h"
//Unsere Anwendung
CMyApp    theApp;

Damit sind wir am Ende dieser Lektion angelangt. In der nächsten Lektion werden wird das Beispiel vervollständigen und unserer Anwendung ein Fenster hinzufügen.

Zurück Zum Inhaltsverzeichnis Weiter


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