Die Hauptfunktion ist das Grundgerüst des Windows-Programms.
int PASCAL WinMain (HANDLE hInst,HANDLE hPrevInst,LPSTR lpCmdLine,int nCmdShow)
Dem Hauptfenster wird ein Handle des Hauptfensters und des vorherigen Fensters übergeben. Mit dem hPrevInst-Parameter kann überprüft werden ob das Programm das erste Mal gestartet wurde. Eine Ausnahme bildet Win32. Hier ist der hPrevInst-Parameter immer NULL.
1.1 Fenster registrieren
if (!hPrevInst) {
wndclass.style = NULL;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInst;
wndclass.hIcon = LoadIcon (0, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(0, IDC_ARROW);
wndclass.hbrBackground = COLOR_WINDOW+1;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szApplName;
if (!RegisterClass (&wndclass)) return 1; // Fehler beim Fenster-
} // Registrieren
Beim der Fensterregistrierung wird die Fensterklasse in Windows registriert, also die Informationen über das Hauptfenster eingetragen. Die Menüs, Icons und Cursor werden aus der Resourcendatei mittels der ID\'s eingetragen.
1.2 Fenster erzeugen und anzeigen
hWnd = CreateWindow ( szApplName, // Fenster-Klassen-Name
szWinTitle, // Fenster-Titel
WS_OVERLAPPEDWINDOW, // Fenster-Stil
CW_USEDEFAULT, 0, // x, y Standard-Pos.
CW_USEDEFAULT, 0, // cx,cy Standard-Größe
NULL, NULL, // kein Vater, kein Menü
hInst, NULL // Ersteller, kein WM-C.P
);
if (!hWnd) return 2; // Fehler beim Fenster-
// Erzeugen if
ShowWindow (hWnd, nCmdShow);
UpdateWindow (hWnd);
Beim Erzeugen des Fensters wird dann das Fenster bereits erzeugt aber noch nicht angezeigt. Mit ShowWindow wird das durch den Handle identifizierte Fenster angezeigt während mit UpdateWindow ein WM_PAINT ausgelöst wird, welches den Fenster-Inhalt anzeigt.
1.3 Meldungsschleife
while (GetMessage (&msg, 0, 0, 0)) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
Der TranslateMessage-Befehl wandelt einen Befehl so um, daß er beim nächsten GetMessage ausgelesen werden kann. Der GetMessage liest dann den umgewandelten Befehl ein und gibt bei der Nachricht WM_QUIT den Wert NULL zurück. DispatchMessage schickt den eingelesenen Befehl dann an die entsprechende Fensterfunktion. Die Export-Funktionen (WndProc und DlgProc) an die die Nachrichten weitergeleitet werden, werden in der DEF-Datei eingetragen.
|