Messageboxen

Zurück Zum Inhaltsverzeichnis Weiter

Wie gesagt, nun wird's ernst! In dieser Lektion erstellen wir ein erstes, voll funktionsfähiges WINDOWS Programm.

In der vorherigen Lektion haben Sie etwas über die Einsprungsfunktion WinMain(...) erfahren. Doch zum Darstellen eines richtigen Fensters fehlen noch einige wichtige, und leider nicht ganz einfache, Dinge. Deshalb wird das erste WINDOWS Programm zunächst einmal ein Programm ohne eigenes Fenster sein.

Sicher kennen Sie zu genüge Meldungen in der Form wie sie nachfolgend dargestellt ist. Solche Meldungen werden mittels einer so genannten Messagebox dargestellt.

Aufbau einer Messagebox

Wie Sie der Grafik entnehmen können, besteht eine Messagebox aus maximal vier Elementen: der Titelzeile, dem Text, einem Symbol (Icon) und den Buttons. WINDOWS enthält zur Ausgabe solcher Meldungen eine eigene API-Funktion, die Funktion MessageBox(...). Über Parameter dieser Funktion können Sie das Aussehen und Verhalten der Messagebox steuern. Wird die Messagebox über einen der Buttons geschlossen, so erhält die Anwendung die ID (Bezeichner) des entsprechenden Buttons zurück und kann dann entsprechend reagieren. Bevor wir nun mit dem ersten Programm beginnen sollten Sie sich unbedingt die Beschreibung der Funktion durch anklicken des kursiv dargestellten Funktionsnamens weiter vorne im Text ansehen.

Zur Darstellung einer Messagebox gibt es noch zwei weitere Funktionen. Die Funktion MessageBoxEx(...) erlaubt (mit bestimmten Einschränkungen) die Auswahl der Sprache für die Beschriftung der Buttons und die Funktion MessageBoxIndirect(...) holt sich die Daten für die Messagebox aus einer Struktur vom Typ MSGBOXPARAMS.

Doch nun endlich genug der Worte, fangen wir an. Unser erstes WINDOWS Programm soll einige Messageboxen mit den verschiedenen Stilen anzeigen.

Starten Sie nun das Visual Studio. Wählen Sie aus dem Menü Datei den Menüpunkt Neu aus. Danach wird folgender Dialog eingeblendet:

Win32-Projekt erstellen

Da wir zunächst nur ein einfaches WINDOWS Programm erstellen, wählen Sie im linken Fenster den Eintrag Win32-Anwendung aus. Im rechten Teil des Dialogs geben Sie den Pfad an, unter dem das neue Projekt abgelegt werden soll sowie den Projektnamen. Für das Beispiel wählen Sie bitte als Projektnamen MessageBox. Den Pfad für das Projekt können Sie selbst festlegen. Aber bitte noch nicht den OK-Button anklicken!

Wie dem linken Fenster entnehmen können, können Sie mit dem Visual Studio eine ganze Reihe von verschiedenen Projekten erstellen. Mit einigen dieser Projekte werden wir uns später im Kurs noch befassen, so z.B. mit dem Projekt MFC-Anwendungs-Assistent (exe) wenn es darum geht, MFC-Anwendungen zu erstellen. Doch nun weiter mit der Übung.

Klicken Sie jetzt den OK-Button an und ein weiterer Dialog erscheint.

Eine einfache Win32-Anwendung erstellen

In diesem Dialog stellen Sie ein, welche Art von WINDOWS Projekt der Assistent für Sie erstellen soll. Ein leeres Projekt ist, wie der Name schon sagt, ein Projekt (fast) ohne jeglichen Inhalt. Das einzige was der Assistent hier erstellt sind die Compiler- und Linkereinstellungen für ein 'normales' WINDOWS Programm. Wählen Sie dagegen als Projekt Eine einfache Win32-Anwendung aus, so wird zusätzlich noch eine Datei erstellt, die die Einsprungsfunktion WinMain(...) bereits enthält. Bei der letzten Projektart Eine typische "Hallo Welt!" Anwendung erstellt der Assistent eine Anwendung die ein voll funktionsfähiges Fenster besitzt. Aber dazu kommen wir erst später wenn wir einige Grundkenntnisse über Fenster besitzen.

Damit wir uns die Arbeit ersparen, die WinMain(...) Funktion selbst eintippen zu müssen, wählen Sie im obigen Dialog als Projektart Eine einfache Win32-Anwendung aus. Klicken Sie anschließend den Button Fertigstellen an. Der Anwendungs-Assistent erstellt Ihnen, nach dem er die Parameter des Projektes in einem letzten Dialog zur Kontrolle nochmals ausgegeben hat, nun eine Reihe von Dateien. Bevor wir uns mit diesen Dateien befassen, wählen Sie im Arbeitsbereich (dass ist der Teil ganz links im Visual Studio Fenster) den Tabulator Dateien aus.
Sollte der Arbeitsbereich nicht sichtbar sein, so wählen Sie im Menü Ansicht den Eintrag Arbeitsbereich aus. Im Visual Studio können Sie die darzustellenden Fenster nach Ihren persönlichen Anforderungen konfigurieren.

Öffnen Sie alle einmal alle Ordner bis Sie die nachfolgende Darstellung haben.

Die Dateien einer einfachen Win32-Anwendung

Der Arbeitsbereich ist in drei Ordner aufgeteilt: den Quellcodedateien, den Header-Dateien und den Ressourcendateien. Der Ordner Quellcodedateien enthält unter anderem die Datei MessageBox.cpp. Dies ist die Datei, in der die Funktion WinMain(...) enthalten ist und die wir nachher gleich um unseren Code erweitern werden. Die Dateien StdAfx.cpp und StdAfx.h dienen zum Einbinden notwendigen Header-Dateien. Nun fragen Sie sich vielleicht, wofür beim Einbinden der Header-Dateien die Datei StdAfx.cpp dienen soll. Sie könnten ja auch die Header-Datei StdAfx.h innerhalb der Anwendung selbst einbinden. Nun, mit Hilfe der Datei StdAfx.cpp erzeugt der Compiler beim ersten Übersetzen der Anwendung eine sogenannte vorcompilierte Header-Datei. Bei jedem weiteren Übersetzungsvorgang wird dann diese vorcompilierte Header-Datei verwendet anstatt alle Header-Dateien erneut einzulesen. Dadurch wird die Übersetzungszeit beträchtlich reduziert, da alle in den Header-Dateien vorhandenen Symbole jetzt aus einer einzigen Datei ausgelesen werden können. Der Ordner Ressourcendateien ist in unseren ersten Projekten noch leer. Hierin werden später die Ressourcen wie z.B. Bitmaps oder Symbole abgelegt. Die letzte Datei ReadMe.txt enthält allgemeine Hinweise über den Sinn und Zwecke der einzelnen Dateien. Sehen Sie sich diese Datei ruhig einmal an!

Außer der Dateiansicht enthält der Arbeitsbereich auch noch eine Klassenansicht. Wenn Sie den Tabulator Klassen anklicken, erhalten Sie eine Übersicht über alle Klassen und globalen Daten und Funktionen in Ihrem Projekt.

Die Variablen und Funktionen einer einfachen Win32-Anwendung

Da unser Projekt noch keine Klassen besitzt, taucht hier nur die Einsprungsfunktion WinMain(...) auf. Führen Sie einen Doppelklick auf diese Funktion aus um die Funktion im Editorfenster anzuzeigen.

// MessageBox.cpp : Definiert den Einsprungpunkt für die Anwendung.
//

#include "stdafx.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow )
{
    // ZU ERLEDIGEN: Fügen Sie hier den Code ein.

    return 0;
}

Wie Sie sehen, hat der Assistent bereits den Rahmen für unser Beispiel erstellt. Diesen Rahmen gilt es nun 'nur' noch zu erweitern.

Bauen wir das 'Programm' jetzt aus. Das Programm soll einige Messageboxen mit verschiedenen Stilen anzeigen. Dazu wird zunächst ein Feld vom Typ UINT definiert, in dem die Messagebox-Stile abgelegt werden. Damit in der Messagebox auch ersichtlich ist, welchen Stil die gerade dargestellte Messagebox besitzt, werden die Messagebox-Stile zusätzlich als Strings abgelegt.
#include "stdafx.h"
// Konstanten
// ----------

// Messagebox-Stile
const UINT awMBOXSTYLES[] = {
    MB_YESNOCANCEL,
    MB_ICONHAND,
    MB_ICONASTERISK,
    MB_ABORTRETRYIGNORE|MB_DEFBUTTON2,
    MB_APPLMODAL,
    MB_SYSTEMMODAL,
    MB_TASKMODAL };

// Messagebox-Texte
LPCTSTR alpszMBOXSTYLES[] = {
    "MB_YESNOCANCEL",
    "MB_ICONHAND",
    "MB_ICONASTERISK",
    "MB_ABORTRETRYIGNORE|MB_DEFBUTTON2",
    "MB_APPLMODAL",
    "MB_SYSTEMMODAL",
    "MB_TASKMODAL" };


// Anzahl der Messageboxen
const short nNOOFMSGBOX = sizeof(awMBOXSTYLES)/sizeof(UINT);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow )
Sie erinnern sich doch noch wie die Übungen zu handhaben sind? Kopieren Sie aus dem obigen Listing über die Zwischenablage nur alle blau und braun, nicht kursiv, dargestellten  Zeilen in Ihre Visual Studio Datei. Die schwarzen, kursiven Anweisungen sollten im Quellcode schon vorhanden sein. Sie dienen nur zur Orientierung damit ersichtlich wird, wohin die einzufügenden Zeilen kopiert werden müssen.

Was jetzt nur noch fehlt ist die Darstellung der Messageboxen. Die Messageboxen werden in einer for-Schleife dargestellt und holen ihren Stil und Text aus den vorhin angelegten Feldern.

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow )
{
    // ZU ERLEDIGEN: Fügen Sie hier den Code ein.

    // Alle Messageboxen ausgeben
    for (int iIndex=0; iIndex<nNOOFMSGBOX; iIndex++)
        MessageBox(0,alpszMBOXSTYLES[iIndex], (LPCTSTR)"MessageBox Typen",
                   awMBOXSTYLES[iIndex]);
    return 0;
}

Damit ist das Beispiel fertig und Sie können es nun durch anklicken des Symbols Image1.gif (858 Byte) im Toolbar des Visual Studios übersetzen und starten. Die Abfrage, ob die EXE-Datei neu erstellt werden soll, ist selbstverständlich zu bejahen.

Wenn Sie das Programm laufen lassen werden die verschiedenen Messageboxen nacheinander dargestellt. Beobachten Sie auch einmal das Verhalten der Messageboxen mit den Stilen MB_xxxMODAL. Wenn eine solche Messagebox angezeigt wird aktivieren Sie einmal ein anderes Fenster.

Das fertige Beispiel finden Sie auch im Programmverzeichnis zum Kurs unter 02EPOMFC\MessageBox\Messagebox.dsw.

Versuchen Sie auch einmal die Parameter von WinMain(...) mittels einer Messagebox auszugeben. Da der Messagebox-Text aber aus einem String besteht, müssen Sie zunächst die Parameter irgendwie in einem String ablegen. Sie können dafür entweder die C-Funktion sprintf(...) oder aber die WINDOWS Funktion wsprintf(...) verwenden. Die Parameter und die Formatangaben der Funktion wsprintf(...) sind mit denen von sprintf(...) identisch. Wenn Sie sich nicht ganz sicher über den Aufbau der Funktion sind, sehen Sie in der Online-Hilfe zur Funktion nach.

So, war doch gar nicht so schwer, oder? Ab der nächsten Lektion werden wir uns nun ansehen, wie Sie Ihrer Anwendung ein Fenster verpassen können.

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