Freigeben über


Modul 1. Ihr erstes Windows-Programm

In diesem Modul schreiben wir ein minimales Windows-Desktopprogramm. Alles, was es tut, wird erstellt und zeigt ein leeres Fenster an. 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

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 vollständige Visual Studio-Projekt aus Windows Hello World Sampleherunterladen.

Es kann hilfreich sein, einen kurzen Überblick darüber zu geben, was dieser Code tut. In späteren Themen wird der Code ausführlich untersucht.

  1. wWinMain ist der Einstiegspunkt des Programms. 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 WindowProc genannt wird. Diese Funktion definiert das Verhalten des Fensters – seine Darstellung, wie sie mit dem Benutzer interagiert 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 wird, gibt das Programm eine ein, während Schleife ausgeführt wird. Das Programm bleibt 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 dies der Ort ist, an dem die meisten Anwendungslogik definiert sind. Windows kommuniziert mit Ihrem Programm, indem es eine Reihe von Nachrichtenübergeben. Der Code innerhalb der , während Schleife diesen Prozess steuert. Jedes Mal, wenn das Programm die DispatchMessage--Funktion aufruft, bewirkt es indirekt, dass Windows die WindowProc-Funktion einmal für jede Nachricht aufruft.

In diesem Abschnitt

Lernprogramm für Windows in C++-

Windows Hello World-Beispiel-