Inhaltsverzeichnis

Das erste Fenster

Der Code

#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:

Die Struktur WNDCLASS

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);

Die CreateWindow-Funktion

Das Fenster ist registriert, nun können wir es mithilfe der Funktion CreateWindow() erstellen.

Die WinProc-Funktion