Fenster erstellen

Zurück Zum Inhaltsverzeichnis Weiter

Kommen wir nun zum zweiten Schritt, dem Festlegen der individuellen Eigenschaften eines Fensters und dessen Erstellung.

Festlegen der generellen Eigenschaften eines Fensters über die Fensterklasse.
no2.gif (1016 Byte) Festlegen der individuellen Eigenschaften eines Fensters und Erstellung des Fensters.
no3b.gif (1017 Byte) Anzeigen des Fensters.
no4b.gif (1014 Byte) Schreiben der Nachrichtenschleife um die Nachrichten abzuholen und zu verteilen.
no5b.gif (1008 Byte) Schreiben des Programmteiles zur Verarbeitung der Nachrichten. Dieser Programmteil wird auch als Fensterprozedur bezeichnet.

Um nun ein Fenster zu erstellen (bisher haben wir ja nur die Fensterklasse definiert) wird 'lediglich' die API-Funktion CreateWindowEx(...) aufgerufen. Diese Funktion ist aber ein abschreckendes Beispiel dafür wie man eine Funktion eigentlich nicht definieren sollte. Sie erhält 12 (in Worten: zwölf!) Parameter übergeben um die individuellen Eigenschaften des zu erstellenden Fensters festzulegen. Sehen Sie sich jetzt unbedingt einmal die Beschreibung dieser Funktion an.

Als Returnwert liefert die Funktion das so wichtige Fenster-Handle. Dieses Fenster-Handle wird für alle weiteren Funktionen benötigt die sich mit der Steuerung des Fenster befassen. Schlug die Erstellung des Fenster fehl, so liefert CreateWindowEx(...) den Wert '0' zurück.

Erweitern Sie nun das in der letzten Lektion begonnene Beispiel FirstWin um die Erstellung eines Fensters das folgende Eigenschaften besitzen soll:
  • keinen erweiterten Fensterstil
  • das Fenster soll ein überlappendes Fenster sein
  • der Fenstertitel soll lauten: "Mein erstes Fenster"
  • die Größe und Position des Fensters soll durch WINDOWS bestimmt werden

Verwenden Sie unbedingt die Online-Hilfe zur Funktion um das entsprechende Fenster zu erstellen. Die Online-Hilfe ist Ihr wichtigstes Hilfsmittel!

Übersetzen Sie nach der Erweiterung das Beispiel wieder um eventuelle Fehler zu beseitigen. Und dazu nochmals folgender Hinweis: die Fehlermeldung, dass die Fensterprozedur WndProc nicht definiert ist, werden wir erst später beseitigen.

Lösung zur Erstellung eines Fensters

Dies ist nun unwiderruflich der letzte Hinweis zur Handhabung der Listings.
Die kursiven, schwarzen Anweisungen wurden entweder durch den Assistenten erstellt oder in einem früheren Schritt schon eingegeben. Diese brauchen Sie nicht mehr in ihr Projekt kopieren. Kopieren Sie also nur die nicht-kursiven blauen und brauen Anweisungen. Aber kopieren Sie alle notwendigen Teile! Beachten Sie dabei, dass es auch mehrere, einzeln zu kopierende Programmteile geben kann.
....
// Fensterklassen-Name
LPCTSTR lpszWCLASSNAME = "ERSTES FENSTER";
// Fenstername und -titel
LPCTSTR lpszTITLE = "Mein erstes Fenster";

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow )
{
    ....
    // Fensterklasse registrieren
    RegisterClassEx(&WndClass);

  
// Fenster erzeugen
    HWND hWindow;                                  // Fenster-Handle
    hWindow = CreateWindowEx(0,                   
// kein erweiterter Stil
                             lpszWCLASSNAME,      
// Fensterklassen-Name
                             lpszTITLE,           
// Fenstertitel
                             WS_OVERLAPPEDWINDOW, 
// Fensterstil
                             CW_USEDEFAULT, 0,    
// Position
                             CW_USEDEFAULT, 0,    
// Groesse
                             (HWND)0,             
// kein Parent-Fenster
                             (HMENU)0,            
// kein Menu
                             hInstance,           
// Instanzen-Handle
                             NULL);               
// keine zusaetzl. Daten
   
// Fehler abfangen
    if (hWindow == NULL)
    {
        MessageBox(0,"Fehler beim CreateWindowEx(...)!",
                   "FEHLER",MB_OK);
        return 0;
    }

    return 0;
}

Zunächst wird eine weitere Konstante, diesmal für den Fensternamen (gleich Fenstertitel), definiert.

Die Festlegung der individuellen Eigenschaften eines Fensters sowie dessen Erstellung erfolgt mit der Funktion CreateWindowEx(...). Als Ergebnis liefert die Funktion ein Fenster-Handle auf das neu erstellte Fenster. Hierzu wird vor dem Aufruf der Funktion eine weitere Variable hWindow vom Typ HWND definiert, die den Returnwert der Funktion aufnimmt.

Das Fenster erhält im ersten Schritt keine erweiterten Fensterstile weshalb der erste Parameter der Funktion mit '0' belegt wird. Danach folgt der Name der Fensterklasse der dieses Fenster angehört. Hier geben wir wieder die Konstante lpszWCLASSNAME an die auch schon beim Aufruf der vorherigen Funktion RegisterClassEx(...) verwendet wurde. Dadurch gehört dieses Fenster zur Fensterklasse 'ERSTES FENSTER' und übernimmt deren Grundeinstellungen, d.h. das Fenster wird z.B. mit einem grauem Hintergrund dargestellt werden. Als nächstes folgt die Angabe des Fenstertitels. Die Position und Größe des Fensters lassen wir durch WINDOWS festlegen. Aus diesem Grund geben wir für die Parameter die Konstante 'CW_USEDEFAULT' an. Da das zu erstellende Fenster das Hauptfenster der Anwendung ist besitzt es selbst kein weiteres übergeordnetes Fenster. Das Fenster-Handle des übergeordneten Fenster wir daher auf '0' gesetzt. Das gleiche gilt für das Menü, das dem Fenster zugewiesen wird (Menüs folgen erst später). Die Werte für die beiden restlichen Parametern ergeben sich von selbst.

Ende der Lösung

So viel zur Erstellung eines Fensters. Als nächstes sehen wir uns an, wie man ein Fenster letztendlich zur Anzeige bringt. Denn der alleinige Aufruf von CreateWindowEx(...) bringt das Fenster noch zum Vorschein.

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