Aracılığıyla paylaş


Modül 1. İlk Windows Programınız

Bu modülde minimal bir Windows masaüstü programı yazacağız. Tek yaptığı boş bir pencere oluşturmak ve göstermektir. Bu ilk program, boş satırları ve açıklamaları saymak yerine yaklaşık 50 satırlık kod içerir. Bu bizim başlangıç noktamız olacak; daha sonra grafik, metin, kullanıcı girişi ve diğer özellikleri ekleyeceğiz.

Visual Studio'da geleneksel bir Windows masaüstü uygulaması oluşturma hakkında daha fazla ayrıntı arıyorsanız bkz. İzlenecek Yol: Geleneksel bir Windows Masaüstü uygulaması oluşturma (C++).

Program Windows'a Öğrenin başlıklı boş bir pencere olduğunu gösteren örnek programın ekran görüntüsü.

Programın tam kodu aşağıdadır:

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

Visual Studio projesinin tamamını Windows Hello World Sampleadresinden indirebilirsiniz.

Bu kodun ne yaptığının kısa bir özetini vermek yararlı olabilir. Daha sonraki konular kodu ayrıntılı olarak inceler.

  1. wWinMain program giriş noktasıdır. Program başladığında, uygulama penceresinin davranışı hakkında bazı bilgiler kaydeder. En önemli öğelerden biri, bu örnekteki WindowProc adlı işlevin adresidir. Bu işlev pencerenin davranışını(görünümü, kullanıcıyla nasıl etkileşime geçtiğini vb.) tanımlar.
  2. Ardından program pencereyi oluşturur ve pencereyi benzersiz olarak tanımlayan bir tanıtıcı alır.
  3. Pencere başarıyla oluşturulursa, döngü sırasında program bir girer. Kullanıcı pencereyi kapatıp uygulamadan çıkana kadar program bu döngüde kalır.

Uygulama mantığının çoğunun tanımlandığı yerin burası olduğunu söylememiz rağmen programın açıkça WindowProc işlevini çağırmadığını görebilirsiniz. Windows, bir diziiletisi geçirerek programınızla iletişim kurar. döngüsü sırasında içindeki kod bu işlemi yönetir. Program DispatchMessage işlevini her çağırışında, dolaylı olarak Windows'un her ileti için bir kez WindowProc işlevini çağırmasına neden olur.

Bu bölümde

C++'da Windows için Programlamayı Öğrenin

Windows Hello World Örnek