Artikel pedia
| Home | Kontakt | Artikel einreichen | Oberseite 50 artikel | Oberseite 50 autors
 
 


Artikel kategorien
Letztes fugte hinzu
    Ms-access

   Instrumentation + schnittstellen

   Pc tuning - volle kraft voraus für ihr system

   Informatorische grundlagen

   Javascript

   Interne sortieralgorithmen - der kern der sache

   Plotter und sonstige drucker

   Frage 20 (rössl priska)

   Internet - programmierung

   Monitore

   Semesterarbeit und spezialgebiet für informatik

   Erörterungs zum thema

   Inhaltsverzeichnis

   Einführung in die entwicklung ganzheitlicher informationssysteme:

   Titel dokument
alle kategorien




  Prinzipieller aufbau eines windows-programms in c



Prinzipieller Aufbau eines Windows-Programms in C von Reis Thorsten1. 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) {       wndclass.style         = NULL;       wndclass.lpfnWndProc   = WndProc;       wndclass.cbClsExtra    = 0;       wndclass.cbWndExtra    = 0;       wndclass.

hInstance     = hInst;       wndclass.hIcon         = LoadIcon  (0, IDI_APPLICATION);       wndclass.hCursor       = LoadCursor(0, IDC_ARROW);       wndclass.hbrBackground = COLOR_WINDOW+1;       wndclass.lpszMenuName  = NULL;       wndclass.lpszClassName = szApplName;       if (!RegisterClass (&wndclass))  return 1;     // Fehler beim Fenster-    }                                                 //        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)) {       TranslateMessage (&msg);       DispatchMessage  (&msg);    } 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) {    switch (msg) {       case WM_PAINT:       WndProcWMPAINT       (hWnd);                  break;       case WM_LBUTTONDOWN: WndProcWMLBUTTONDOWN (hWnd);                  break;       case WM_DESTROY:     PostQuitMessage (0);                          break;       default:             return  DefWindowProc(hWnd, msg, wPar, 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) {    BOOL ret = TRUE;    switch (msg) {       case WM_INITDIALOG: SetFocus (GetDlgItem (hWnd, IDD_FELD_I));                           ret = FALSE;                                 break;       case WM_COMMAND:    DlgProcWMCOMMAND (hWnd, wPar);               break;       case WM_CLOSE:      EndDialog (hWnd, 0);                         break;       default:            ret = FALSE;    }    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) {    FARPROC lpitDialog;     // Instanz-Verbinder zur Dialog-Funktion    lpitDialog = MakeProcInstance ((FARPROC)DlgProc, hMainInst);    DialogBox (hMainInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, lpitDialog);    FreeProcInstance (lpitDialog);    InvalidateRect (hWnd, NULL, TRUE); } 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 Änderung 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.  

Suchen artikel im kategorien
Schlüsselwort
  
Kategorien
  
  
   Zusammenfassung Der Vorleser

   sachtextanalyse

   interpretation zwist

   Fabel interpretation

   literarische charakteristik

   interpretation bender heimkehr

   felix lateinbuch

   interpretation der taucher von schiller

   textbeschreibung

   charakterisierung eduard selicke


Anmerkungen:

* Name:

* Email:

URL:


* Diskussion: (NO HTML)




| impressum | datenschutz

© Copyright Artikelpedia.com