항상 작업해둔 내용에 자세한 코드는 GitHub에 올려두고 있습니다.
이제 Core 클래스를 만들었으면 Core의 init함수에서 해상도에 맞춰 화면을 그려보려 한다.
이때 화면을 그린다는건 메뉴바등을 다 제외한 실제 클라이언트 영역을 의미한다.
먼저 실제 화면을 그리려면 AdjustWindowRect를 통해 내가 그리고 싶은 화면의 크기를 조정한다.
이때 rt를 레퍼로 보냈는데 반환값이 따로 없다. 대신 AdjustWindowRect가 실행되고 나면 내가 레퍼 참조로 보낸 rt에는 조정된 값으로 들어와 있는데 이는 실제로 반환값이 매우 큰 타입의 경우 자주 쓰이는 프로그래밍 기법이니 참고해두자
그 후 Core 클래스의 progress에서 그려보자. 왜냐? 게임은 메시지 처리 방식이 아닐 뿐더러 WinPain에서 이를 수정해 Message 처리 방식을 수정했기에 메시지가 없을 때 Core->progress()를 호출하기 때문이다.
우리는 지금까지 그리기 위해 main.cpp에서 BeginPaint() 와 EndPaint()를 이용해 그렸다. 그러나 이는 메시지 처리 방식이로 이를 이용하지 않고 GetDC를 이용해 그리기 DC를 가져와 Rectangle(c_hdc)를 넣어 그리면 된다.
이제 progress()에는 update와 render 함수가 생겼다. update에는 현재 키 입력에 따른 위치 이동과 render에선 그려주고 있다. 이를 실행하면 놀랍게도 결과는 이상하게 나온다...
왜냐면 렌더가 60번이 되어야 보통 사람눈엔 자연스럽게 인식된다는데 지금 저 progress()는 매우 많이 호출되어 이상하게 보이는 것이기에 이를 제어할 시간이 필요하다. 이제 이를 수정하는 방법에 대해선 다시 공부해서 수정하려고 한다.
'WinAPI 32' 카테고리의 다른 글
08 WinAPI) Timer (0) | 2023.11.17 |
---|---|
06 WinAPI) Singleton (0) | 2023.11.12 |
05 WinAPI) PeekMessage (0) | 2023.11.11 |
04 WinAPI) 핸들과 DC(2) (0) | 2023.11.10 |
03 WinAPI) 핸들과 DC(1) (0) | 2023.11.09 |