Condividi tramite


Modulo 1. Il primo programma Windows

In questo modulo verrà scritto un programma desktop di Windows minimo. Tutto ciò che fa è creare e visualizzare una finestra vuota. Questo primo programma contiene circa 50 righe di codice, senza contare righe vuote e commenti. Sarà il nostro punto di partenza; successivamente verranno aggiunti elementi grafici, testo, input utente e altre funzionalità.

Per altre informazioni su come creare un'applicazione desktop di Windows tradizionale in Visual Studio, vedere Procedura dettagliata: Creare un'applicazione desktop di Windows tradizionale (C++).

Screenshot del programma di esempio, che mostra che è una finestra vuota con il titolo Learn to Program Windows.

Ecco il codice completo per il programma:

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

È possibile scaricare il progetto di Visual Studio completo da Windows Hello Esempio mondiale.

Può essere utile fornire una breve descrizione delle operazioni di questo codice. Gli argomenti successivi esamineranno il codice in dettaglio.

  1. wWinMain è il punto di ingresso del programma. All'avvio del programma, registra alcune informazioni sul comportamento della finestra dell'applicazione. Uno degli elementi più importanti è l'indirizzo di una funzione, denominato WindowProc in questo esempio. Questa funzione definisce il comportamento della finestra, ovvero l'aspetto, il modo in cui interagisce con l'utente e così via.
  2. Successivamente, il programma crea la finestra e riceve un handle che identifica in modo univoco la finestra.
  3. Se la finestra viene creata correttamente, il programma immette un ciclo while . Il programma rimane in questo ciclo fino a quando l'utente non chiude la finestra e chiude l'applicazione.

Si noti che il programma non chiama in modo esplicito la WindowProc funzione, anche se si è detto che questa è la posizione in cui è definita la maggior parte della logica dell'applicazione. Windows comunica con il programma passando una serie di messaggi. Il codice all'interno del ciclo while esegue questo processo. Ogni volta che il programma chiama la funzione DispatchMessage , windows richiama indirettamente la funzione WindowProc, una volta per ogni messaggio.

Contenuto della sezione

Informazioni sul programma per Windows in C++

Esempio mondiale di Windows Hello