Vorheriges Kapitel:  Visual C++ Tools   Nächstes Kapitel: Ihre erste Anwendung       Inhaltsverzeichnis Inhaltsverzeichnis       Die Downloadseite Download       Kontakt Kontakt

 

Grundlagen

 

 

Die MFC Bibliothek
Nachrichten und Befehle
Das Weiterleiten von Nachrichten
Die Nachrichtenschleife
Behandlung von Nachrichten in Visual C++

 

 

 

 

Die MFC Bibliothek

 

In jeder objektorientierten Programmiersprache, wie Microsoft Visual C++, zählt die Vererbung zu den wichtigsten Vorteilen des Klassenkonzeptes. Die Vererbung erlaubt Programmierern und Entwicklern, ihre Objekte von anderen Klassen abzuleiten und so größere Bibliotheken zu erstellen, worin die Klassen in einem bestimmten Verhältnis zu einander stehen. Eine solcher Bibliotheken ist die MFC. MFC heißt im Englischen Microsoft Foundation Classes. Ziel der MFC Bibliothek ist es, mit Power von C++ Windows Anwendungen zu erzeugen. Die Wiederverwertung des Quellcodes ist ein besonderes Anliegen der MFC. Wie Sie vielleicht wissen, liegt ein großer Nachteil von Windows-API darin, daß sie nicht objektorientiert ist. Entwickler, die mit Windows-API arbeiten, müssen jedes Mal für jede Anwendung alles nochmals neu schreiben. Die MFC Bibliothek ruft selbst Funktionen auf, die in Windows-API implementiert worden sind, um Windows Bestandteile, wie Dialogboxen, Gerätekontext, allgemeine GDI-Objekte und andere Standardelemente zu erzeugen. Die MFC Klassen, die diese Art von Objekten erzeugen, bieten eine angenehmere Schnittstelle, da sie die Eigenschaften von C++ ausnutzen. Eine der wichtigen Besonderheiten von MFC ist ihre große Nähe zu Windows-API. Wenn Sie meinen, daß MFC nicht nah genug an Windows-API geht, können Sie für die Erstellung Ihrer Anwendung parallel zu MFC auch direkt Windows-API Funktionen aufrufen. Es ist zu erwähnen, daß MFC eher als eine Art Tool gedacht ist, um Anwendungen mit Windows-API zu entwickeln und nicht als Ersatz dafür.

 

Windows

 

 

 

In Windows bilden Nachrichten den Kern der Programmierung. Alles was in einem Programm geschieht, wird in Windows durch Nachrichten angestoßen. Eine Nachricht ist eine Art Kommunikationsmittel, womit das Windows Betriebssystem einer Anwendung mitteilt, daß etwas stattgefunden hat. Stellen Sie sich vor, Sie bewegen die Maus, oder drücken auf eine Maustaste, oder geben etwas per Tastatur ein. Windows ist in der Lage, mit Hilfe von Nachrichten, Ihrer Anwendung von diesen Aktionen zu berichten.

 

 

Windows verfügt über eine lange Liste von Nachrichten, die jede Eventualität umfassen. Jede Nachricht hat einen bestimmten Namen bzw. Reihenfolge, die der Windows bekannt ist. Auf eine Nachricht wird über ihren jeweiligen Namen Bezug genommen. Wenn Sie zum Beispiel auf die linke Maustaste klicken, wird die Nachricht WM_LBUTTONDOWN ausgelöst. Oder Wenn Sie die Maus bewegen, wird die Nachricht WM_MOUSEMOVE aktiv. WM steht für " Window Message ".

Jedes Mal, wenn Sie eine Aktion betätigen, bemerkt das Windows-Betriebssystem die Aktion und leitet diese in Form einer Nachricht an die Anwendung. Die Anwendung versucht, diese Nachricht zu bearbeiten, falls sie nicht dazu in der Lage ist, schickt sie die Nachricht an Windows zurück und Windows entledigt sich anschließend dieser Nachricht.

 

 

 

Dreh- und Angelpunkt einer Windows Anwendung bildet die Nachrichtenschleife. Die Nachrichtenschleife befindet sich in der Funktion WinMain. WinMain ist das Äquivalent für die Funktion Main bei einem DOS Programm. In einem MFC Programm werden Sie vergeblich nach der Funktion WinMain suchen. Diese Funktion gibt es aber trotzdem. In einem MFC Programm müssen Sie die Funktion WinMain nicht selbst implementieren, sie wird vom AppWizard(Anwendungsassistent) generiert, jedoch von Ihnen verborgen gehalten. Ohne weiter in die Einzelheiten zu gehen und die Verwirrung noch zu vergrößern, genügt es zu wissen, daß eine Nachrichtenschleife in der Fensterprozedur meistens in Form einer langen switch-Anweisung implementiert wird, die wiederum für jede Nachricht eine case-Anweisung bereitstellt. Eine derartige Schleife kann sehr lang werden, was wiederum die Wartungsarbeit sehr schwierig machen kann. Ein Vorteil der MFC Programmierung besteht darin, daß Sie keine umfangreiche Nachrichtenschleife schreiben müssen. Statt dessen macht die MFC von Nachrichtentabellen Gebrauch.

 

 

 

Wenn AppWizard eine Anwendung für Sie erzeugt hat, müssen Sie sich dann vielleicht nur um eine Handvoll von Nachrichten und Nachrichtenbehandlungsroutinen oder besser gesagt Nachrichten-Funktionen kümmern. Um den Rest kümmert sich die Anwendung selbst. Wie Sie bereits wissen, reagiert Windows auf ein Ereignis mit einer Nachricht. Um diese Nachricht auch abfangen und bearbeiten zu können, brauchen Sie dafür eine Nachrichten-Funktion. ClassWizard(Klassenassistent) ist das richtige Werkzeug zum Umgang mit Nachrichten und Nachrichten-Funktionen. Wenn Sie mit ClassWizard eine Nachrichten-Funktion erzeugen, verwaltet Visual C++ diese in einer Nachrichtentabelle(Message Map). Nachrichtentabellen sind ein fester Bestandteil der Windows-Programmierung mit MFC. Nachrichtentabellen werden in der Regel von den Wizards erzeugt und bestehen aus zwei Teilen. Der erste Teil befindet sich in der Headerdatei und der zweite Teil in der entsprechenden .cpp Datei. Die Nachrichtentabellen sind in Form von Makros realisiert worden. Die Deklaration einer Nachrichtentabelle in der Headerdatei einer Anwendung namens "Anwendung" zum Beispiel, die vom AppWizard erzeugt worden ist, kann wie folgt aussehen:

 

//{{AFX_MSG(CAnwendungApp)
afx_msg void OnAppAbout();

//}}AFX_MSG
DECLARE_MESSAGE_MAP()

 

Der zweite Teil der Nachrichtentabelle in der entsprechenden .cpp Datei sieht wie folgt aus:

BEGIN_MESSAGE_MAP(CAnwendungApp, CWinApp) 
//{{AFX_MSG_MAP(CAnwendungApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

//}}AFX_MSG_MAP

// Standard file based document commands

ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

 

 

      Vorheriges Kapitel:  Visual C++ Tools   Nächstes Kapitel: Ihre erste Anwendung       Inhaltsverzeichnis Inhaltsverzeichnis       Die Downloadseite Download       Kontakt Kontakt