Module 1. Votre premier programme Windows

Dans ce module, nous allons écrire un programme de bureau Windows minimal. Tout cela est créé et affiche une fenêtre vide. Ce premier programme contient environ 50 lignes de code, sans compter les lignes vides et les commentaires. Ce sera notre point de départ; plus tard, nous allons ajouter des graphiques, du texte, des entrées utilisateur et d’autres fonctionnalités.

Si vous recherchez plus d’informations sur la création d’une application de bureau Windows traditionnelle dans Visual Studio, consultez la procédure pas à pas : Créer une application bureau Windows traditionnelle (C++).

Screenshot of the example program, which shows it is a blank window with the title Learn to Program Windows.

Voici le code complet du programme :

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

Vous pouvez télécharger le projet complet Visual Studio à partir d’Windows Hello Exemple world.

Il peut être utile de donner un bref aperçu de ce que fait ce code. Les rubriques ultérieures examineront en détail le code.

  1. wWinMain est le point d’entrée du programme. Au démarrage du programme, il enregistre des informations sur le comportement de la fenêtre d’application. L’un des éléments les plus importants est l’adresse d’une fonction, nommée WindowProc dans cet exemple. Cette fonction définit le comportement de la fenêtre : son apparence, son interaction avec l’utilisateur, etc.
  2. Ensuite, le programme crée la fenêtre et reçoit un handle qui identifie de manière unique la fenêtre.
  3. Si la fenêtre est créée avec succès, le programme entre une boucle while . Le programme reste dans cette boucle jusqu’à ce que l’utilisateur ferme la fenêtre et quitte l’application.

Notez que le programme n’appelle pas explicitement la WindowProc fonction, même si nous avons dit que la plupart de la logique d’application est définie. Windows communique avec votre programme en lui transmettant une série de messages. Le code à l’intérieur de la boucle while conduit ce processus. Chaque fois que le programme appelle la fonction DispatchMessage, il provoque indirectement l’appel de Windows la fonction WindowProc, une fois pour chaque message.

Contenu de cette section

Apprenez à programmer pour Windows en C++

exemple Windows Hello World