Share via


Modul 1. Ihr erstes Windows-Programm

In diesem Modul schreiben wir ein minimales Windows-Desktopprogramm. Es wird nur ein leeres Fenster erstellt und angezeigt. Dieses erste Programm enthält etwa 50 Codezeilen, ohne leere Zeilen und Kommentare zu zählen. Es wird unser Ausgangspunkt sein; Später fügen wir Grafiken, Text, Benutzereingaben und andere Features hinzu.

Weitere Informationen zum Erstellen einer herkömmlichen Windows-Desktopanwendung in Visual Studio finden Sie unter Exemplarische Vorgehensweise: Erstellen einer herkömmlichen Windows-Desktopanwendung (C++).

Screenshot des Beispielprogramms, das zeigt, dass es sich um ein leeres Fenster mit dem Titel Learn to Program Windows handelt.

Hier ist der vollständige Code für das Programm:

#ifndef UNICODE
#define UNICODE
#endif 

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
    // Register the window class.
    const wchar_t CLASS_NAME[]  = L"Sample Window Class";
    
    WNDCLASS wc = { };

    wc.lpfnWndProc   = WindowProc;
    wc.hInstance     = hInstance;
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&wc);

    // Create the window.

    HWND hwnd = CreateWindowEx(
        0,                              // Optional window styles.
        CLASS_NAME,                     // Window class
        L"Learn to Program Windows",    // Window text
        WS_OVERLAPPEDWINDOW,            // Window style

        // Size and position
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

        NULL,       // Parent window    
        NULL,       // Menu
        hInstance,  // Instance handle
        NULL        // Additional application data
        );

    if (hwnd == NULL)
    {
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);

    // Run the message loop.

    MSG msg = { };
    while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);

            // All painting occurs here, between BeginPaint and EndPaint.

            FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));

            EndPaint(hwnd, &ps);
        }
        return 0;

    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

Sie können das gesamte Visual Studio-Projekt aus Windows Hello World Sample herunterladen.

Es kann hilfreich sein, eine kurze Beschreibung der Funktionsweise dieses Codes zu geben. In späteren Themen wird der Code ausführlich untersucht.

  1. wWinMain ist der Einstiegspunkt für das Programm. Wenn das Programm gestartet wird, werden einige Informationen zum Verhalten des Anwendungsfensters registriert. Eines der wichtigsten Elemente ist die Adresse einer Funktion, die in diesem Beispiel genannt wird WindowProc . Diese Funktion definiert das Verhalten des Fensters – sein Aussehen, seine Interaktion mit dem Benutzer usw.
  2. Als Nächstes erstellt das Programm das Fenster und empfängt ein Handle, das das Fenster eindeutig identifiziert.
  3. Wenn das Fenster erfolgreich erstellt wurde, wechselt das Programm in eine while-Schleife . Das Programm verbleibt in dieser Schleife, bis der Benutzer das Fenster schließt und die Anwendung beendet.

Beachten Sie, dass das Programm die WindowProc Funktion nicht explizit aufruft, obwohl wir gesagt haben, dass hier der größte Teil der Anwendungslogik definiert ist. Windows kommuniziert mit Ihrem Programm, indem es eine Reihe von Nachrichten übergibt. Der Code in der while-Schleife steuert diesen Prozess. Jedes Mal, wenn das Programm die DispatchMessage-Funktion aufruft, bewirkt dies indirekt, dass Windows die WindowProc-Funktion einmal für jede Nachricht aufruft.

In diesem Abschnitt

Learn to Program for Windows in C++

Beispiel für Windows Hello World