Sdílet prostřednictvím


Modul 1. Váš první program pro Windows

V tomto modulu napíšeme minimální desktopovou aplikaci pro Windows. Stačí vytvořit a zobrazit prázdné okno. Tento první program obsahuje asi 50 řádků kódu, nepočítá prázdné řádky a komentáře. Bude to náš výchozí bod. později přidáme grafiku, text, uživatelský vstup a další funkce.

Pokud hledáte další podrobnosti o tom, jak vytvořit tradiční desktopovou aplikaci pro Windows v sadě Visual Studio, podívejte se na Návod: Vytvoření tradiční desktopové aplikace windows (C++).

snímek obrazovky s ukázkovým programem, který ukazuje, že se jedná o prázdné okno s názvem Naučte se programovat Windows.

Tady je úplný kód pro program:

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

Kompletní projekt sady Visual Studio si můžete stáhnout z ukázky Windows Hello World.

Může být užitečné poskytnout stručný přehled toho, co tento kód dělá. Další témata podrobně prověří kód.

  1. wWinMain je vstupní bod programu. Při spuštění programu zaregistruje některé informace o chování okna aplikace. Jednou z nejdůležitějších položek je adresa funkce s názvem WindowProc v tomto příkladu. Tato funkce definuje chování okna – jeho vzhled, způsob interakce s uživatelem atd.
  2. Dále program vytvoří okno a obdrží popisovač, který jednoznačně identifikuje okno.
  3. Pokud se okno úspěšně vytvoří, program během smyčky zadá. Program zůstane v této smyčce, dokud uživatel nezavře okno a aplikaci ukončí.

Všimněte si, že program explicitně nevolá funkci WindowProc, i když jsme řekli, že to je místo, kde je definována většina logiky aplikace. Systém Windows komunikuje s programem předáním řady zpráv . Kód uvnitř zatímco smyčka tento proces řídí. Pokaždé, když program volá DispatchMessage funkce, nepřímo způsobí, že Systém Windows vyvolá funkci WindowProc jednou pro každou zprávu.

V této části

Naučte se programovat pro Windows v jazyce C++

ukázkové Windows Hello World