본문 바로가기

デベロップメント/ゲームプログラミング

2.2.3 윈도우 클래스

2.2.3 윈도우 클래스


윈도우를 표시하는데에는, 그 전에 윈도우 클래스를 작성해서 등록할 필요가 있습니다.

윈도우 클래스는 윈도우의 초기 기능의 몇가지를 정의한 곳입니다.

이 정의는 WNDCLASSEX 구조체에 값을 설정하여 실행되어집니다.

이 구조체에는 다수의 멤버가 있는 것이 알려져 있습니다만, 걱정하지 마세요.

작성할 게임에 따라서 일단 구성해버리면, 그것 나름대로, 많은 변화는 필요 없습니다.

코드 2.3의 열에는, 이 구조체의 이름은 wcx입니다.


코드 2.3 WNDCLASSEX 구조체

WNDCLASSEX wcx;
HWND hwnd;
// 윈도우 클래스의 구조체를 메인 윈도우를 기술하는 파라메터로 설정합니다.
wcx.cbSize = sizeof(wcx);			// 구조체의 사이즈
wcx.style = CS_HREDRAW | CS_VREDRAW;		// 윈도우 사이즈 변화시에 재구성
wcx.lpfnWndProc = WinProc;			// 윈도우 프로시저를 가리킴
wcx.cbClsExtra = 0;				// 확장 클래스 메모리 없음
wcx.cbWndExtra = 0;				// 확장 윈도우 메모리 없음
wcx.hInstance = hInstance;			// 인스턴스에 대한 핸들
wcx.hIcon = NULL;
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);	// 사전 정의된 화살표 커서
wcx.hbrBackground =				// 배경 브러쉬
	(HBRUSH)GetStockObject(Black_BRUSH);
wcx.lpszMenuName = NULL;			// 메뉴 리소스의 이름
wcx.lpszClassName = CLASS_NAME;			// 윈도우 클래스의 이름
wcx.hIconSm = NULL;				//작은 아이콘

// 윈도우 클래스를 등록
// 에러 시에, RegisterClassEx는 0을 반환
if(RegisterClassEx(&wcx) == 0)			// 에러의 경우
	return false;


이하로, wcx의 멤버 이것저것을 설명합니다.


cbSize : 이것은 구조체의 사이즈입니다. 여기에서는, sizeof(wcx)를 사용해서, wcx구조체의 사이즈를 cbSize에 설정하고 있습니다.

style : 갱신 방법 등, 윈도우의 스타일을 정의합니다. OR연산자 「|」를 사용해 복수의 스타일을 지정할 수 있습니다. 이 열에서는, 「CS_HREDRAW | CS_VREDRAW」를 사용하고 있습니다. 이것은 가로 또는 세로의 사이즈가 갱신될 때에 윈도우를 재구성하는 설정입니다.

lpfnWndProc : 윈도우에 송신된 메세지를 처리하는 함수에 대한 포인터입니다. WinProc는, 메세지를 처리하기 위해 작성하는 함수입니다. (자세한 것은, 나중에 설명합니다.)

cbClsExtra : 이 윈도우 클래스용에 시스템이 예약한 확장 메모리의 사이즈를 지정합니다. 이번은 이 확장 메모리는 필요하지 않으므로 0으로 설정합니다.

hInstance : 클래스를 등록한 어플리케이션을 식별합니다. 다른 Windows 함수를 호출 할 때에 어플리케이션을 식별하기 위해서 사용됩니다.

hIcon : Windows가 이 프로그램을 보여주기 위해 사용된 큰 아이콘을 정의합니다. 설정 방법은 나중에 설명합니다.

hCursor : 윈도우에 사용될 마우스 커서를 정의합니다. 이 예로는, 표준의 화살표 커서를 사용합니다.

hbrBackground : 윈도우의 배경을 채운 색상 또는 패턴을 지정합니다. 이 예에서는, 흑색으로 윈도우를 채웁니다.

lpszMenuName : 윈도우에 특정의 메뉴가 정의되어 있지 않은 경우에 사용하는 디폴트의 메뉴를 정의합니다. 이 예에서는, 디폴트 메뉴는 정의되어 있지 않습니다. 이 멤버는 NULL로 설정합니다.

lpszClassName : 등록된 클래스의 안에 이 클래스를 식별하기 위한 이름입니다. 이 클래스 이름은, CreateWindow 함수를 호출할 때도 사용 할 필요가 있으므로, 다음과 같이 CLASS_NAME 이라고 하는 정수를 작성합니다.

const char* const CLASS_NAME = "WinMain";

hIconSm : 윈도우의 타일바나 스타트 메뉴에 사용된 작은 아이콘을 정의합니다.

RegisterClassEx : 클래스 작성의 최후의 스텝으로써, 이 클래스를 Windows에 등록합니다. 이것은 RegisterClassEx 함수를 호출해 행합니다(코드 2.4). RegisterClassEx는, 에러시에 0을 반환합니다. 코드에서는, RegisterClassEx의 반환값을 체크해, 에러의 경우는 false를 반환합니다.


#코드 2.4 윈도우 클래스의 등록

// 윈도우 클래스를 등록
// 에러시에, RegisterClassEx는 0을 반환
if(RegisterClassEx(&wcx) == 0)	// 에러의 경우
	return false;



서장으로