Pre DirectX Tutorial: Teil 3- Windows Klassen II
Hallo mal wieder! Ich hoffe ihr habt im letzten Kurs nicht zu viel Staub geschluckt
vor lauter trockenem Thema. Diesmal geht es ähnlich weiter, sorry.
Wir hatten uns das letzte Mal die Definition einer Windows Klasse angesehen.
Gut und schön, aber wir müssen Windows auch mitteilen das wir diese
unsere Windows Klasse auch wirklich nutzen wollen. Also müssen wir die
Klasse registrieren, damit Windows überhaupt etwas damit anfangen kann.
Das ist einfacher als es sich anhört und ist mit zwei Zeilen schon getan:
--------------------------------------------------------------------------------
if (!RegisterClassEx(&winclass))
return(0);
--------------------------------------------------------------------------------
Das RegisterClassEx(&winclass) macht die Hauptarbeit und registriert unsere
Windows Klasse. Die If-Prüfung soll nur sicherstellen das alles glatt gelaufen
ist. Falls die Klasse nicht registriert werden konnte wissen wir das ein Fehler
aufgetreten ist und können das Programm anhalten.
Nun gut, jetzt haben wir eine registrierte Windows Klasse. Die ist aber nichts
wert ohne ein Fenster, welches mit dieser Klasse geöffnet wird. Also auf
zum Code
--------------------------------------------------------------------------------
HWND CreateWindowEx(
DWORD dwExStyle,
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam);
--------------------------------------------------------------------------------
Das ist der Standard um ein Fenster (oder fensterähnliche Objekte) zu
öffnen.Gehen wir wieder Schritt für Schritt vor.
dwExStyle: Hier könnt ihr einige weitergehende Verhaltensregeln für
euer Fenster definieren. Mit WS_EX_TOPMOST ist euer Fenster z.B. immer im Vordergrund
und ähnliche Spielereien. Die meißte Zeit ist der Wert aber NULL.
lpClassName: Das ist die Windows Klasse die euer Fenster benutzen soll. Hier
tragt ihr den Namen ein, den ihr für eure Klasse vergeben habt.
lpWindowName: Hier kommt der Titel eures Fensters hinein. Also "Mein erstes
Windows Fenster" oder so.
dwStyle: Wichtig. Dies beschreibt wie sich das Fenster verhält. Ihr könnt
unheimlich viele Einstellungen vornehmen wie "Fenster zu Anfang geschlossen",
"Fenster als Pop Up", "Fenster mit Scrollbalken" und so
weiter. Schafft euch eine Liste an, da es zu viele sind sie hier eingehend zu
beschreiben. Ich werde aber in späteren Kursen immer mal wieder unterschiedliche
Werte hier nutzen.
x/ y: Die beiden Werte sind einfach nur die X und Y Position eures Fensters
ausgehend von der linken oberen Ecke. Wenn es euch egal ist nutzt CW_USEDEFAULT
und Windows wird eurem Fenster einen Platz zuweisen.
nWidth/ nHeight: Das ist die Höhe und Breite eures Fensters in Pixeln.
CW_USEDEFAULT ist wieder die Alternative.
hWndParent: Das ist ein Handle zu einem übergeordneten Fenster (falls
es denn eines gibt). Die meißten Programme haben den Desktop als übergeordnetes
Fenster, aber wenn ihr innerhalb eurer Applikation noch Fenster öffnen
wollt ist eure Applikation das übergeordnete Fenster.
hMenu: Hier könnt ihr eine Menüleiste zu eurem Fenster hinzufügen.
Ist bei Spielen und Demos ziemlich sinnlos, bei Applikationen aber wichtig.
NULL fürs erste
hInstance: Wichtig. Dies ist die Instanz unseres Programmes. Erinnert ihr euch
noch an den ersten Teil und wie Windows arbeitet? Dies ist das Handle eures
Programmes, welches ihr in der WinMain definiert.
lpParam: Im Moment nicht wichtig. NULL
So. Wenn das Fenster nicht erstellt werden konnte nach diesem Versuch wird
Windows NULL zurückliefern. Somit können wir die ganze Sache in eine
IF-Prüfung packen und gleich Alarm geben wenn etwas schief gegangen ist.
Im ganzen wird dann etwa folgendes daraus:
--------------------------------------------------------------------------------
if (!(hwnd = CreateWindowEx(NULL,
WINDOW_CLASS_NAME,
"Das erste Windows Fenster",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
10,10,
200,200,
NULL,
NULL,
hinstance,
NULL)))
return(0);
--------------------------------------------------------------------------------
Ihr könnt wieder aufatmen. Ihr wisst jetzt wie man Fenster öffnet.
Zumindest theoretisch. Praktisch fehlt noch ein bischen um das ganze zu einem
fertigen Programm zusammen zu fügen. Aber das kommt das nächste Mal.
Freut euch schon jetzt auf Event Handling - der wahre Genuß!
Bis denn dann.
Delax
[delax@sundancerinc.de]