Modul 1. Program Windows Pertama Anda

Dalam modul ini, kita akan menulis program desktop Windows minimal. Yang dilakukannya adalah membuat dan menampilkan jendela kosong. Program pertama ini berisi sekitar 50 baris kode, tidak menghitung baris kosong dan komentar. Ini akan menjadi titik awal kami; nanti kita akan menambahkan grafik, teks, input pengguna, dan fitur lainnya.

Jika Anda mencari detail selengkapnya tentang cara membuat aplikasi desktop Windows tradisional di Visual Studio, lihat Panduan: Membuat aplikasi Windows Desktop tradisional (C++).

Cuplikan layar program contoh, yang menunjukkannya adalah jendela kosong dengan judul Pelajari ke Program Windows.

Berikut adalah kode lengkap untuk program ini:

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

Anda dapat mengunduh proyek Visual Studio lengkap dari Windows Hello World Sample.

Mungkin berguna untuk memberikan garis besar singkat tentang apa yang dilakukan kode ini. Nantinya topik akan memeriksa kode secara rinci.

  1. wWinMain adalah titik masuk program. Ketika program dimulai, ia mendaftarkan beberapa informasi tentang perilaku jendela aplikasi. Salah satu item terpenting adalah alamat fungsi, bernama WindowProc dalam contoh ini. Fungsi ini mendefinisikan perilaku jendela—tampilannya, bagaimana ia berinteraksi dengan pengguna, dan sebagainya.
  2. Selanjutnya, program membuat jendela dan menerima handel yang secara unik mengidentifikasi jendela.
  3. Jika jendela berhasil dibuat, program akan memasuki perulangan sementara . Program tetap dalam perulangan ini sampai pengguna menutup jendela dan keluar dari aplikasi.

Perhatikan bahwa program tidak secara eksplisit memanggil WindowProc fungsi, meskipun kami mengatakan di sinilah sebagian besar logika aplikasi ditentukan. Windows berkomunikasi dengan program Anda dengan meneruskannya serangkaian pesan. Kode di dalam perulangan sementara mendorong proses ini. Setiap kali program memanggil fungsi DispatchMessage , secara tidak langsung menyebabkan Windows memanggil fungsi WindowProc, sekali untuk setiap pesan.

Di bagian ini

Pelajari Program untuk Windows di C++

Sampel Dunia Windows Hello