REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
 EnglischEpochenFranzösischBiologieInformatikItalienisch
 KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  



Prinzipieller Aufbau eines Windows-Programms in C

Prinzipieller Aufbau eines Windows-Programms in C

1. Hauptfunktion

Die Hauptfunktion ist das Grundgerüst des Windows-Programms.

int PASCAL WinMain (HANDLE hInst,HANDLE hPrevInst,LPSTR lpCmdLine,int nCmdShow)

Dem Hauptfenster wird ein Handle des Hauptfensters und des vorherigen Fensters übergeben. Mit dem hPrevInst-Parameter kann überprüft werden ob das Programm das erste Mal gestartet wurde. Eine Ausnahme bildet Win32. Hier ist der hPrevInst-Parameter immer NULL.



1.1 Fenster registrieren

if (!hPrevInst)                  //        Registrieren

Beim der Fensterregistrierung wird die Fensterklasse in Windows registriert, also die Informationen über das Hauptfenster eingetragen. Die Menüs, Icons und Cursor werden aus der Resourcendatei mittels der ID's eingetragen.

1.2 Fenster erzeugen und anzeigen

hWnd = CreateWindow (   szApplName,          // Fenster-Klassen-Name                 szWinTitle,          // Fenster-Titel                 WS_OVERLAPPEDWINDOW,         // Fenster-Stil                 CW_USEDEFAULT, 0,            // x, y   Standard-Pos.                 CW_USEDEFAULT, 0,            // cx,cy  Standard-Größe                 NULL, NULL,          // kein Vater, kein Menü                 hInst, NULL          // Ersteller, kein WM-C.P if (!hWnd)          return 2;     // Fehler beim Fenster-                   //        Erzeugen if ShowWindow   (hWnd, nCmdShow); UpdateWindow (hWnd);

Beim Erzeugen des Fensters wird dann das Fenster bereits erzeugt aber noch nicht angezeigt. Mit ShowWindow wird das durch den Handle identifizierte Fenster angezeigt während mit UpdateWindow ein WM_PAINT ausgelöst wird, welches den Fenster-Inhalt anzeigt.

1.3 Meldungsschleife

while (GetMessage (&msg, 0, 0, 0))

Der TranslateMessage-Befehl wandelt einen Befehl so um, daß er beim nächsten GetMessage ausgelesen werden kann. Der GetMessage liest dann den umgewandelten Befehl ein und gibt bei der Nachricht WM_QUIT den Wert NULL zurück. DispatchMessage schickt den eingelesenen Befehl dann an die entsprechende Fensterfunktion. Die Export-Funktionen (WndProc und DlgProc) an die die Nachrichten weitergeleitet werden, werden in der DEF-Datei eingetragen.

2. Fensterfunktionen

2.1 Hauptfenster

LONG FAR PASCAL _export WndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)    return  0;

Die Hauptfenster-Funktion wird immer dann aufgerufen, wenn GetMessage eine Windows-Nachricht erhält. Der Parameter msg gibt die Art der Meldung an, während die beiden Parameter wPar und lPar weitere Informationen über die Nachricht enthalten.

2.2 Dialogfenster

BOOL FAR PASCAL _export DlgProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)    return ret;

Die Dialogfenster-Funktion funktioniert wie die Hauptfenster-Funktion. Wenn ein Dialog angelegt worden ist, werden die Nachrichten vom Hauptprogramm an diese Funktion weitergeleitet, auf die dann dort entsprechend reagiert werden kann.

3. Dialoge erzeugen

Dialoge sind eigene Fenster die einen Windows-Handle erhalten. Das Aussehen der Dialoge wird durch die Resourcen-Datei bestimmt. Im Resourcen-Headerfile, welches im Hauptprogramm eingebunden wird, werden außerdem die Dialogelemente mit ID's identifiziert.

void WndProcWMLBUTTONDOWN (HWND hWnd)

In diesem Beispiel wird der Dialog beim Klicken der Linken Maustaste angelegt. Dazu muss zuerst eine Instanz auf die Dialogfenster-Funktion angelegt werden. Das betrifft aber nur die 16Bit-Windows-Version, da im Win32 auf die Funktion direkt zugegriffen werden kann. Die Funktion DialogBox erzeugt dann das Fenster welches als Parameter den Handle des Hauptfensters, die Resourcen-ID des Dialogs, der Handle des Erzeugers des Fensters (in diesem Fall ebenfalls das Hauptfenster) und die Instanz der Fensterfunktion. Die Kontrolle an das Hauptfenster wird hier erst wieder zurückgegeben, wenn der Dialog geschlossen wird (modaler Dialog).

4. Meldungen

In Windows-Programmen wird hauptsächlich mit Meldungen gearbeitet. Wie schon erwähnt werden die Meldungen an die jeweiligen Fensterfunktionen geschickt. Da auch Dialogfenster genauso Fenster sind wie das Hauptfenster gibt es diesselben Nachrichten. Hier einige der wichtigsten Windows-Meldungen.

WM_PAINT: Wird bei jeder Anderung des jeweiligen Fensters aufgerufen. Hier werden die grafischen Ausgaben im Fenster festgelegt.

WM_LBUTTONDOWN, WM_RBUTTONDOWN,..: Wird bei Maustastendruck ausgelöst.

WM_DESTROY: Wird ausgelöst wenn das Fenster geschlossen wird.

WM_CLOSE: Im Prinzip wie WM_DESTROY, nur daß bei WM_CLOSE nur die Anweisung daß das Fenster geschlossen werden soll geschickt wird. Mit dieser Nachricht kann auch verhindert werden daß das Fenster normal geschlossen wird.

WM_INITDIALOG: Wird ausgelöst, wenn ein Dialog neu erstellt wurde. Dient für Initialisierungen.

WM_COMMAND: Ist die Meldung, daß ein Command-Button gedrückt wurde. Im wPar-Parameter ist die Resourcen-ID des Buttons festgehalten.

Die Meldungen müssen nicht unbedingt vom Programm ausgelöst werden, es ist auch möglich die Meldungen mittels PostMessage selbst zu schicken. Bsp.:PostMessage (hWnd, WM_CLOSE, 0, 0); Es wird an das Fenster ein WM_CLOSE geschickt, welches dann beim nächsten GetMessage darauf reagiert.







Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen