본문 바로가기

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

2.2.2 WinMain 함수

2.2.2 WinMain 함수


지금까지의 프로그래밍을 해본 적이 있는 사람이라면 「Hello World」 프로그램을 한개나 두개는 만들어 본 적 있을 것이지요. (프로그래밍이 정말로 처음인 분은, 일단, C++프로그래밍의 해설서를 읽는 것을 추천합니다. ・・・・・・기다리고 있을테니, 걱정하지 않으셔도 됩니다. ・・・・・・OK, 어서오세요. 빨랐네요!)

여기서 기억을 회상해봅시다.
C++의 「Hello World」는 코드 2.1과 같은 것이라고 생각합니다.


코드 2.1 C++의 「Hello World」 프로그램

#include 
int main(){
	std::cout << "Hello World";
	std::cin.get();		// Enter키를 대기
	return 0;
}


일반적, 단순한 텍스트 메세지를 표시하지만 필요한 코드는 얼마 안되는 숫자행(行)입니다.

이것은 프로그래머에 대신 Windows가 출력 윈도우를 작성을 담당하고 있기 때문입니다.

또, 예상대로 이것부터 작성하는 Windows 버전의 「Hello World」는, 윈도우를 프로그래머 자신이 직접 작성하기 위해, 더 조금 복잡해집니다.


코드 2.1의 프로그램에서는, iostream 헤더파일을 포함하고 있습니다.

iostream 헤더 파일에는, cout과 cin을 사용하기 위해 필요합니다.

Windows 프로그래밍에서는 windows.h 헤더 파일을 사용합니다.

windows.h 헤더파일은 많은 정의와 헤더파일을 포함하고 있습니다.

이 중에는 본 책의 어플리케이션에 필요한 것도, 필요하지 않은 것도 포함하고 있습니다.

추가한 헤더파일이 조금이라도 늘어나면, 실제로 프로그램이 느려질 수 있습니다.

포함한 파일의 개수를 줄이기 위해, 이번에는 windows.h를 포함하기 전에 #define WIN32_LEAN_AND_MEAN을 사용해봅시다.

코드 2.1의 프로그램에는 「main」이라고 하는 이름의 함수가 있습니다.

main 함수는 프로그램의 실행이 시작하는 부분입니다.

Windows 프로그래밍에서는, 이 main 함수가 WinMain으로 대체됩니다.

WinMain 함수는 코드 2.2에 보여드리는 코드와 같습니다.


코드 2.2 WinMain 함수

// ==============================================================
// Windows 어플리케이션의 시작점
int WINAPI WinMain(HINSTANCE hInstance,
		   HINSTANCE hPrevInstance,
		   LPSTR     lpCmdLine,
		   int	     nCmdShow)


보시다시피, WinMain은 기존의 main 함수와 다릅니다.

이하에, WinMain의 각부분을 간단하게 설명합니다.


반환형태는 int입니다.

WinMain에서 반환되는 값에 대해서는, 이 장의 후반에 메세지와 메세지 루프를 확인할 때에 자세히 설명하겠습니다.

거기까지 기다리지 못하시는 분을 위해 설명하자면, WinMain에는, 통상, WM_QUIT 메세지를 받기까지 실행을 계속하는 메세지 루프가 포함되어 있습니다.

WinMain은 WM_QUIT 메세지를 받으면, 종료 메세지의 wParam 파라메터에 저장되어 있는 값을 반환합니다.

WinMain이 메세지 루프에 들기 전에 중단되는 경우에는 0이 반환됩니다.


다음의 WINAPI라고 불리는 규약입니다.

호출 규약은 함수를 어떤 형태로 호출하는가를 정의합니다.

파라메터의 전달되는 순서, 스택의 클린 업 방법같은 것은 전부 호출 규약에 지정됩니다.


입력 파라메터는 다음과 같습니다.


hInstance : 이것은 기본적으로는, 어플리케이션에 대한 포인터입니다. 일부의 Windows 함수는 이것을 사용해서, 어떤 어플리케이션에서 호출되었는가를 판별합니다.

hPrevInstance : 보통은 NULL 입니다. 폐지된 파라메터로써, 단순히 이전 버전의 Windows와의 하위호환성을 위해 파라메터 리스트로 남겨두고 있습니다.

lpCmdLine : 커맨드라인 파라메터를 저장하고 있는 NULL 종단문자열에 대한 포인터입니다. 커맨드라인 파라메터로는, 어플리케이션의 기동시에 그 어플리케이션에 전달되는 단어나 기호입니다.

nCmdShow : 윈도우를 어떤 방법으로 표시할지를 지정합니다.


이것들은 전부 WinMain 함수에 대한 입력 파라메터입니다.

일반적으로는 게임 프로그램으로 윈도우의 외견을 제어하기 위해 이것을 사용하는 것은 없습니다.

윈도우의 외견을 변경하기 위해서 WinMain 파라메터를 변경하려고 해서 혼란에 빠지는 것이 자주 있습니다.
WinMain의 입력 파라메터는 전부, 별개의 장소에 설치되어 있습니다.

윈도우의 외견을 바꾸는 방법은 이후의 섹션에서 자세히 설명하겠습니다.



서장으로