다음을 통해 공유


모듈 1. 첫 번째 Windows 프로그램

이 모듈에서는 최소 Windows 데스크톱 프로그램을 작성합니다. 빈 창을 만들고 표시하기만 하면 됩니다. 이 첫 번째 프로그램에는 빈 줄과 주석을 계산하지 않고 약 50줄의 코드가 포함되어 있습니다. 그것은 우리의 시작점이 될 것입니다; 나중에 그래픽, 텍스트, 사용자 입력 및 기타 기능을 추가합니다.

Visual Studio에서 기존 Windows 데스크톱 애플리케이션을 만드는 방법에 대한 자세한 내용은 연습: 기존 Windows 데스크톱 애플리케이션 만들기(C++)확인하세요.

프로그램 창에 대해 알아보기라는 제목의 빈 창이 표시된 예제 프로그램의 스크린샷입니다.

프로그램에 대한 전체 코드는 다음과 같습니다.

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

Windows Hello World 샘플 전체 Visual Studio 프로젝트를 다운로드할 수 있습니다.

이 코드가 수행하는 작업을 간략하게 설명하는 것이 유용할 수 있습니다. 이후 항목에서는 코드를 자세히 검사합니다.

  1. wWinMain 프로그램 진입점입니다. 프로그램이 시작되면 애플리케이션 창의 동작에 대한 일부 정보를 등록합니다. 가장 중요한 항목 중 하나는 이 예제에서 WindowProc 함수의 주소입니다. 이 함수는 창의 모양, 사용자와 상호 작용하는 방식 등의 동작을 정의합니다.
  2. 다음으로 프로그램은 창을 만들고 창을 고유하게 식별하는 핸들을 받습니다.
  3. 창이 성공적으로 만들어지면 프로그램이 루프를 동안 입력합니다. 프로그램은 사용자가 창을 닫고 애플리케이션을 종료할 때까지 이 루프에 남아 있습니다.

대부분의 애플리케이션 논리가 정의된 경우라고 하더라도 프로그램이 WindowProc 함수를 명시적으로 호출하지 않습니다. Windows는 일련의메시지를 전달하여 프로그램과 통신합니다. 루프가 이 프로세스를 구동하는 동안 내의 코드입니다. 프로그램에서 DispatchMessage 함수를 호출할 때마다 Windows에서 각 메시지에 대해 한 번씩 WindowProc 함수를 호출하도록 간접적으로 발생합니다.

이 섹션에서는

C++ Windows용 프로그램 학습

Windows Hello World 샘플