모듈 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 프로젝트를 다운로드할 수 있습니다.
이 코드가 수행하는 작업을 간략하게 설명하는 것이 유용할 수 있습니다. 이후 항목에서 코드를 자세히 살펴봅니다.
-
wWinMain은 프로그램 진입점입니다. 프로그램이 시작되면 애플리케이션 창의 동작에 대한 일부 정보를 등록합니다. 가장 중요한 항목 중 하나는 이 예제에서 이름이
WindowProc
인 함수의 주소입니다. 이 함수는 창의 모양, 사용자와 상호 작용하는 방식 등 창의 동작을 정의합니다. - 다음으로 프로그램은 창을 만들고 창을 고유하게 식별하는 핸들을 받습니다.
- 창이 성공적으로 만들어지면 프로그램은 while 루프를 입력합니다. 프로그램은 사용자가 창을 닫고 애플리케이션을 종료할 때까지 이 루프에 남아 있습니다.
대부분의 애플리케이션 논리가 정의되는 곳이라고 했음에도 불구하고 프로그램이 WindowProc
함수를 명시적으로 호출하지 않는다는 점에 유의하세요. Windows는 일련의 메시지를 전달하여 프로그램과 통신합니다.
while 루프 내의 코드가 이 프로세스를 구동합니다. 프로그램이 DispatchMessage 함수를 호출할 때마다 간접적으로 Windows가 각 메시지에 대해 한 번씩 WindowProc 함수를 호출하도록 합니다.
섹션 내용
관련 항목