Bagikan melalui


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 dan komentar kosong. 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 Walkthrough: Membuat aplikasi Windows Desktop tradisional (C++).

Cuplikan layar program contoh, yang menunjukkannya adalah jendela kosong dengan judul Belajar untuk 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 Sampel Windows Hello World .

Mungkin berguna untuk memberikan kerangka 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 yang paling penting 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 memasukkan saat perulangan. Program tetap dalam perulangan ini sampai pengguna menutup jendela dan keluar dari aplikasi.

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

Di bagian ini

Belajar Program untuk Windows di C++

Sampel Windows Hello World