1. 윈도우 생성
윈도우 생성은 윈도우 클래스를 등록하고, 인스턴스를 만든 뒤, 윈도우를 표시하는 과정을 거칩니다.
윈도우 클래스 등록
윈도우 클래스는 윈도우의 기본적인 속성과 스타일을 정의합니다.
윈도우 클래스 등록을 위해서는 RegisterClass 함수를 사용합니다.
WNDCLASS WndClass;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 메인화면.
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
윈도우 인스턴스 생성
윈도우 인스턴스는 윈도우 클래스를 기반으로 생성된 개별 윈도우입니다.
윈도우 인스턴스를 생성하려면 CreateWindow 함수를 사용합니다.
hWnd = CreateWindow(
lpszClass,
lpszClass,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
(HMENU)NULL,
hInstance,
NULL
);
윈도우 표시
윈도우를 표시하려면 ShowWindow 함수를 사용합니다.
ShowWindow(hWnd, SW_SHOW);
2. 윈도우 소멸
윈도우 소멸은 윈도우 인스턴스를 제거하고 등록된 윈도우 클래스를 해제하는 과정을 거칩니다.
Window 제거함수 DestroyWindow
DestroyWindow(hwnd);
Window 제거 함수는 DestroyWIndow 함수가 호출되면서 제거됩니다.
실제 Window 제거 로직
int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance
, _In_ LPSTR lpszCmdParam, _In_ int nCmdShow)
{
// ... 생략
while (GetMessage(&Message, 0, 0, 0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch (iMessage) {
case WM_CLOSE:
{
int check = MessageBox(hWnd, L"프로그램을 종료하시겠습니까?",
L"종료 확인:", MB_ICONQUESTION | MB_OKCANCEL);
if (IDCANCEL == check)
return 0;
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
//... 생략
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
Window에서 오른쪽 위의 창닫기 X 표시를 누르면 WM_CLOSE 메시지가 호출됩니다.
WM_CLOSE 메시지에서 정말 닫을 것인지를 묻는 메시지를 발생한 뒤 닫는다면 해당 메시지를
DefWindowProc에 반환합니다.
반환 시 DestroyWinodw 함수가 호출됩니다.
호출된 DestroyWindow 함수는 WM_DESTROY 메시지를 발생시킵니다.
WM_DESTROY 메시지는 PostQuitMessage 함수를 호출하고 윈도우 운영체제에 WM_QUIT 메시지를 발생시킵니다.
WM_QUIT 메시지가 메시지 루프를 종료하게 됩니다.
참고
'Win32 API' 카테고리의 다른 글
10. Win32 API - DC 개요 (0) | 2024.02.24 |
---|---|
9. Win32 API - GDI 개요 (0) | 2024.02.24 |
7. Win32 API - Windows 프로그램 구성 (0) | 2024.02.24 |
6. Win32 API - WindowClass (0) | 2024.02.24 |
5. Win32 API - Event (0) | 2024.02.24 |