Das Fenster erzeugen


Unter Windows werden normalerweise rechteckige Fenster erzeugt, mit denen der Benutzer interagiert. Daher stellen wir erst einmal einige grundlegende Merkmale eines Fensters zusammen, die wir dann in einem Programm definieren wollen:

Wert Bedeutung
x, y, w, h linke obere Ecke (x, y), und Breite und Höhe (w, h) des Fensters
Icon Icon des Fensters
SysMenu das Systemmenü, das sich beim Klicken auf das Icon bzw. mit ALT-Leertaste öffnet
Rahmen kein Rahmen, fester Rahmen, bzw, mit der Maus veränderbarer Rahmen
Caption Beschriftungstext in der Titelzeile
Minimizebox, Maximizebox Schaltfläche zum Minimieren und Maximieren des Fensters
Cursor Form des Mauszeigers innerhalb des Fensters
Background Hintergrundfarbe, -muster des Fensters
Menu Menü, das zum Fenster gehört


Man sieht: als Programmierer muss man sich allein schon wegen der grafischen Unterstützung von Windows-Programmen um eine Vielzahl grafischer Details kümmern, die mehr mit dem Design als mit dem Programmierziel zu tun haben. Die Fenstermerkmale werden an zwei Stellen definiert. Die erste Hälfte wird im Fensterklassen-Record, die zweite Hälfte wird mit der Funktion "CreateWindowEx" festgelegt. Im Quellcode finden Sie z.B. die Befehlszeile:

CreateWindowEx(0,
               ClassName,
               AppName,
               WS_CAPTION or WS_VISIBLE or WS_SYSMENU or WS_MINIMIZEBOX or
               WS_MAXIMIZEBOX or WS_SIZEBOX,
               CW_USEDEFAULT,  // Position von links
               CW_USEDEFAULT,  // Position von oben
               WindowWidth,    // Breite (hier Konstante)
               WindowHeight,   // Höhe (hier Konstante)
               0,
               0,
               hInstance,
               nil);

Experimentieren Sie einfach mit den kommentierten Werten, und beobachten Sie die Ergebnisse. Sie können auch negative Werte eingeben. Wollen Sie sich weder um die Position noch um die Größe des Fensters kümmern, dann verwenden Sie den Konstantenwert CW_USEDEFAULT anstelle von Pixelangaben.

Ohne vorgreifen zu wollen: Stellen wir uns mal die Frage: »Woher weiß "CreateWindowEx" welche Fensterklasse es als Grundlage nehmen soll?«. In dem Fall ist es recht einfach. Im TWndClassEx-Record haben wir mit "wc.lpszClassName := Classname;" die Möglichkeit, einen Klassennamen anzugeben. In dem Fall eine Konstante aus dem Programmkopf. Den selben Namen übergeben wir als zweiten Parameter an die Funktion "CreateWindowEx".