Computer & Technik
Betriebssysteme
Windows
WinMain
In WinMain werden üblicherweise zwei Aufgaben erledigt, bevor die bereits besprochene Hauptschleife aktiv wird:
1. Installieren der Anwendung
2. Anlegen des oder der Hauptfenster
Bei der Installation ist zwischen der ersten Programmkopie und jeder weiteren zu unterscheiden. WINDOWS ordnet jedes Programm einer Fensterklasse zu, die dem System bekannt sein muß. Folglich muß jede Fensterklasse einmal registriert werden. Dies erledigt immer die erste Programmkopie. Werden später weitere Kopien des selben Programms gestartet, ist die Fensterklasse bereits bekannt und die Registrierung ist überflüssig (und auch unmöglich). WINDOWS stellt jeweils beim Programmstart die Nummer der letzten Instanz zur Verfügung. (Mit Instanz wird jeweils eine Programmkopie bezeichnet.)
TPWin stellt die Instanz über HPrevInst (Unit SYSTEM) bereit. Ist der Wert 0, handelt es sich um die erste Instanz und die Fensterklasse muß registriert werden. Dazu dient ein Record vom Typ TWndClass:
TYPE
TWndClass = RECORD
style : WORD;
lpfnWndProc : TFarProc;
cbClsExtra : INTEGER;
cbWndExtra : INTEGER;
hInstance : THandle;
hIcon : HIcon;
hCursor : HCursor;
hbrBackGround : HBrush;
lpszMenuName : PChar;
lpszClassName : PChar;
END;
An diesen Datentyp sind im Moment nur drei Elemente interessant:
1. lpfnWndProc
2. lpszMenuName
3. lpszClassName
lpfnWndProc zeigt auf eine Funktion, an die WINDOWS alle Meldungen sendet, die für dieses Fenster bestimmt sind. Diese Funktion muß einen LongInt zurückliefern und zusätzlich als EXPORT deklariert werden.
In lpszMenuName wird der Name übergeben, der in der Ressourcen-Datei zur Definition des Menüs verwendet wurde. In der Regel stimmt dieser Name mit dem Namen der Applikation überein. Dies muß jedoch nicht sein, wie auch unser Beispielprogramm ASCII zeigt.
In lpszClassName wird der Name der Fensterklasse übergeben. Dieser muß eindeutig sein und stimmt daher in der Regel mit dem Namen der Applikation überein.
Die restliche Werte der Struktur können auf 0 gesetzt werden.
Diese Vorbelegung kann am besten per Konstante erfolgen, wie dies im Programm ASCII erfolgt ist.
Anschließend können weitere Initialisierungen erfolgen. ASCII setzt beispielsweise:
- Applikatonseigenen ICON
- Standard-Cursor
- Hintergrund = weiß.