#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; HWND hwnd; WNDCLASS WndClass; WndClass.style = CS_HREDRAW | CS_VREDRAW; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.lpszClassName = TEXT ("MainWindow"); WndClass.hInstance = hInstance; WndClass.hbrBackground = GetSysColorBrush(COLOR_3DFACE); WndClass.lpszMenuName = NULL; WndClass.lpfnWndProc = WndProc; WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION); RegisterClass(&WndClass); hwnd = CreateWindow(WndClass.lpszClassName, TEXT("MainWindow") , WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 300, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while ( GetMessage(&msg,NULL,0,0)) { DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam); }
Führen Sie die Anwendung aus und sie sehen dieses Fenster:
Wie sie sehen besteht das Programm aus den Funktionen WndProc und WinMain. WinMain stellt den Einstiegspunkt des Programmes dar, zu WndProc komme ich unten genauer. Im Gegensatz zum Hello World Programm ist der Code deutlich größer, und öffnet lediglich ein leeres Fenster. Allerdings können Sie das Fenster nach Belieben gestalten.
In der WinMain-Funktion wird eine Struktur des Typs WNDCLASS angelegt:
Das Programm ist nun also gestartet, jetzt wollen wir natürlich auch ein Fenster sehen. Dazu müssen wir das Fenster in Windows registrieren. Also erstellen wir eine Struktur WNDCLASS. Das kann wie folgt aussehen:
// Bei Veränderung soll sowohl horizontal als auch vertikal neu gezeichnet werden WndClass.style = CS_HREDRAW | CS_VREDRAW; // Extra Zuordnungsbytes, brauchen wir hier nicht WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; // Der Klassenname WndClass.lpszClassName = TEXT ("MainWindow"); // Die Instanz des Fenster WndClass.hInstance = hInstance; // Hintergrundfarbe WndClass.hbrBackground = GetSysColorBrush(COLOR_3DFACE); // optional: Menü WndClass.lpszMenuName = NULL; // WndProc ist die Window-Prozedur WndClass.lpfnWndProc = WndProc; // Standardcursor WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Standardicon (Taskleiste und Titelleiste des Fensters) WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
Jetzt muss das Fenster mithilfe der RegisterClass()-Funktion registriert werden:
RegisterClass(&WndClass);
Das Fenster ist registriert, nun können wir es mithilfe der Funktion CreateWindow() erstellen.