wWinMain프로그램의 진입점 함수이다.
콘솔은 main 함수가 프로그램의 진입점 이지만, 앱은 wWinMain 함수가 프로그램의 진입점이다.
일반적으로 윈도우 생성, 메시지 루프, 윈도우 프로시저 처리 흐름을 포함한다.
// 전역 변수:
HINSTANCE hInst; // 현재 인스턴스입니다.
WCHAR szTitle[MAX_LOADSTRING]; // 제목 표시줄 텍스트입니다.
WCHAR szWindowClass[MAX_LOADSTRING]; // 기본 창 클래스 이름입니다.
// 이 코드 모듈에 포함된 함수의 선언을 전달합니다:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 여기에 코드를 입력합니다.
// 전역 문자열을 초기화합니다.
LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadStringW(hInstance, IDC_WINAPIUE, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 애플리케이션 초기화를 수행합니다:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINAPIUE));
MSG msg;
// 기본 메시지 루프입니다:
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}


| 매개변수 | 자료형 | 설명 |
|---|---|---|
hInstance |
HINSTANCE |
현재 실행 중인 애플리케이션의 인스턴스 핸들, 주로 리소스를 로드하거나 윈도우 클래스를 등록할 때 사용됨 |
| 실행 된 프로세스의 시작 주소를 의미한다. | ||
hPrevInstance |
HINSTANCE |
이전 인스턴스의 핸들. 항상 NULL |
| (이전 버전의 잔재, 현재 사용하지 않는 인자) | ||
lpCmdLine |
LPWSTR |
프로그램 실행 시 전달된 명령줄 인수 문자열, 유니코드 문자열 wchar_t* (현재 사용하지 않는 인자) |
nCmdShow |
int |
윈도우가 초기 표시 상태 (최대화, 최소화, 숨김 …)를 나타내는 값 SW_SHOW, SW_MINIMIZE … |
cf. hPrevInstance
초창기의 윈도우는 같은 프로세스 실행시 프로세스마다 주소를 가져 이전 인스턴스의 핸들이
필요했지만, 현대의 윈도우는 같은 프로세스를 실행할 때 같은 값의 hInstance 를 갖는다.
이는 윈도우가 가상 메모리라는 시스템을 사용하기 때문에 가능하며, 이와 같은 이유로 현재는 사용하지 않는 인자이다.
LoadStringW
프로젝트 리소스 테이블에서 문자 정보를 가져와 전역 문자열 szTitle, szWindowClass 를
초기화한다. 초기 프로젝트 세팅을 위해 존재하는 함수이다.
이 함수를 사용하지 않고 szTitle, szWindowClass 를 사용하는 곳에 직접 문자열을 입력해도 된다.
szTitle
제목 표시줄 텍스트 (프로그램 타이틀)를 의미한다.
szWindowClass
기본 창 클래스 이름을 의미한다. 이 값을 통해 윈도우 정보를 등록한다.
MyRegisterClass
윈도우 클래스 등록 함수. 윈도우의 스타일과 프로시저 등을 OS에 등록한다.
이때 등록한 윈도우 클래스는 실제 윈도우를 만들기 위한 설계도라고 볼 수 있다.

각 멤버 설명
cbSize |
구조체 크기 설정 sizeof(WNDCLASSEX) |
|---|---|
style |
윈도우 클래스 스타일. |
CS_HREDRAW, CS_VREDRAW 는 리사이징 시 다시 그리도록 지정 |
|
lpfnWndProc |
메시지를 처리할 콜백 함수 주소 WndProc |
cbClsExtra |
|
cbWndExtra |
클래스/윈도우 구조체에 추가로 확보할 메모리 바이트 수 |
일반적으로 0 |
|
hInstance |
현재 애플리케이션 인스턴스 핸들 |
hIcon |
제목 표시줄에 표시되는 큰 아이콘 |
hCursor |
마우스 커서 모양 IDC_ARROW, IDC_HAND 등 |
hbrBackground |
배경 색상 |
lpszMenuName |
메뉴 리소스 ID (없으면 nullptr) |
lpszClassName |
윈도우 클래스 이름 (전역 문자열 szWindowClass) |
hIconSm |
작업 표시줄에 표시되는 작 아이콘 |