D2D와 게임엔진

[D2D 게임만들기 1] WinAPI 알아보기

햄시나 2025. 3. 26. 09:45

API를 공부할 때의 마인드 = 일단 우리가 내부를 전부 다 볼수가 없기도 하고, 내부를 볼 수 있어도 어디까지 봐야하는지 처음 공부시엔 감이 안잡힌다. 그래서 사용을 해나가면서 이해하자! 라는 마인드로 공부해야한다.

 

WinMain 부터 파헤쳐 보기

처음 비주얼스튜디오에서 데스크톱 마법사로 솔루션을 생성하면 보이는것이 아래의 코드다.

여기서 알아야할 것은 일단 하나다. 바로 핸들이라는 개념이다.

 

운영체제 Windows를 기준으로 생각했을 때, 우리는 이미 여러개의 윈도우들을 띄워두며 컴퓨터 사용을 한다.

(예를들어, 카톡창 + 크롬창 + 비쥬얼 스튜디오창...)

 

화면에 띄워진 여러 개의 창을  구분하기 위한 것이 "Handle"이다.

핸들은 프로그램이 차지하는 메모리의 시작주소값이라고 생각하면된다. 

여기에서 만들 윈도우창의 형태를 정하고,

 

밑까지 보다보면 나오는 InitInstance에서 CreateWindowW란 함수를 이용해서 핸들값을 얻어낸다.

즉, CreateWindowW는 메모리상에 윈도우를 만드는 함수다.

 

그리고 이 윈도우 시스템은 "메세지"를 처리하며 돌아간다.

데스크톱 마법사를 켰을 때 기본으로 나오는 메세지 처리함수는 아래와 같이 GetMessage라는 함수다.

이 함수는 프로세스에서 발생한 메세지를 메세지큐에서 가져와 처리하는데, 큐 안에 아무것도 없다면 그냥 아무것도 안가져온다.

 

그러나 게임엔진을 위한 용도로는 적합하지 않는데, 메세지가 없다면 다른 일을 처리하게끔 조건을 걸수가 없기 때문이다.

그래서 우리는 아래와 같이 PeekMessage라는 메세지 처리함수를 이용할 것이다.

PeekMessage 함수는 메세지 유무에 따라 리턴값이 다른데, 이를 이용해서 처리할 메세지가 있으면 처리하고,

메세지가 없으면 게임이 계속 돌아가게끔 할 수 있기 때문이다.

 

 

PS. "메세지"마다의 기능에 대해서는 "SoEn의 메세지루프" 페이지에 자세히 나와있다.