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
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".