본문 바로가기

GAME/핵심 API로 배우는 윈도우 프로그래밍

실습 1-1

 

 

윈도우 프로그램은 메인함수와 메시지 처리 함수로 나뉘어진다. 메인함수의 이름은 보통의 프로그램 main이 아니라

WINAPI라고 명시하고 WinMain으로 만들어준다.

메시지 처리 함수는 CALLBACK WndProc으로 만들어 준다.

 

윈도우에서의 메시지 처리

1 키보드, 마우스 등에 의해 이벤트가 발생한다.

2 발생한 이벤트를 윈도우 시스템이 감지한다.

3 이벤트 발생을 알린다. 이벤트 발생을 알리는 방식 중 정숫값인 메시지를 보내는 방식을 택한다. 보내온 메시지가 메시 지 큐에 차례로 쌓인다.

4 WinMain() 함수는 메시지 큐에서 맨 앞에 대기 중인 메시지를 꺼낸다.

5 꺼낸 메시지를 해석해 메시지 처리 함수에 보낸다. GetMessage() 함수가 메시지 큐에서 메시지를 꺼낸다.

꺼낸 메시지는 msg 변수에 저장하고 TranslateMessage() 함수로 변형한다. TranslateMessage() 함수는 두 메시지를 하나로 변형할 때 이용한다.

6 메시지 처리 함수가 WndProc()라면 WndProc() 함수는 메시지를 받아서 반응을 보인다.반응은 주로 화면 출력으로 나타난다.

#include <windows.h>
#include <TCHAR.H>

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM iParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpszCmdLine, int nCmdShow)
{
	HWND hwnd;
	MSG msg;
	WNDCLASS WndClass;
	WndClass.style = CS_HREDRAW || CS_VREDRAW;
	WndClass.lpfnWndProc = WndProc;
	WndClass.cbClsExtra = 0;
	WndClass.cbWndExtra = 0;
	WndClass.hInstance = hInstance;
	WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	WndClass.lpszMenuName = NULL;
	WndClass.lpszClassName = _T("Window Class Name");
	RegisterClass(&WndClass);
	hwnd = CreateWindow(_T("Window Class Name"),
	_T("Window Title Name"),
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL
		);

		ShowWindow(hwnd, nCmdShow);
		UpdateWindow(hwnd);
		while (GetMessage(&msg, NULL, 0, 0))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		return (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM IParam)
{
	switch (iMsg)
	{
	case WM_CREATE:
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	}
	return DefWindowProc(hwnd, iMsg, wParam, IParam);
}

코드를 입력하고 실행하면 이렇게 윈도우 화면이 뜬다. 

 

출처 : 핵심 API로 배우는 윈도우 프로그래밍

강경우 지음    출판사 : 한빛아카데미

'GAME > 핵심 API로 배우는 윈도우 프로그래밍' 카테고리의 다른 글

실습 2-2  (0) 2021.09.08
실습 1-2  (0) 2021.09.08