Post Lists

2019년 1월 8일 화요일

DirectX Tutorial Lesson 4: Window Size and Client Size

http://www.directxtutorial.com/Lesson.aspx?lessonid=11-1-4

Lesson Overview
그래픽스로 작업할 때, 너가 그리고 있는 area의 정확한 크기를 아는 것은 중요하다. 지난 강의에서, 우리는 500 x 400으로 그것의 크기로 설정했다. 그러나, Direct3D가 그릴 area는 그 윈도우에 대해 500 x 400이 아니다.

이 강의에서, 우리는 그리는 area의 실제 크기를 발견하고, 그것을 좀 더 정확하게 설정하는 함수를 배울 것이다.

Window Size vs. Client Size
우리가 CreateWindowEx()를 호출할 때, 우리는 그 윈도우 크기를 500, 400으로 사용했다. 그러나, 이것은 클라이언트의 크기와 다르다. 그 클라이언트 면적은 그것의 가장자리를 포함하지 않는 부분이다.

너가 여기에서 볼 수 있듯이, 그 윈도우 크기는 그 가장자리의 edges로 부터 확장된다. 반면에 client size는 그 border의 내부에서 확장된다. 렌더링할 때, 우리는 윈도우의 client area에서 그릴 것이다. 그러므로, 그것의 정확한 사이즈를 아는 것은 중요하다.

왜 이것이 매우 중요한가? Direct3D를 사용하여 그릴 때, 너는 만들어질 그 이미지의 크기가 명시하도록 요청된다. 만약 너의 윈도우 클라이언트가 이 이미지와 다른 사이즈라면, 그것은 펼쳐지거나, 그 클라이언트 에어리어에 맞게 줄어든다.

나중의 강의에서 예제 프로그램의 두 스크린샷을 비교해보자. 왼쪽의 이밎는 일반적으로 취해졌고, 오른쪽의 것은 AdjustWindowRect() 없이 취해진 것이다.

너가 볼 수 있듯이, 오른쪽의 스크린샷은 명백한 왜곡을 가지고 있다. 이러한 것은 그 이미지가 client area에 맞게 줄어들었을 때 만들어진다.

The AdjustWindowRect() Function
윈도우 사이즈를 설정하고, 그 클라이언 사이즈를 결정하는 것보다, 클라이언트 사이즈를 미리 결정하고 적절한 윈도우 사이즈를 계산하는 것이 이상적이다. 이것을 하기 위해서, 우리는 윈도우를 만들기 전에 AdjustWindowRect() 함수를 사용할 것이다.

이것은 간단한 함수이다. 그것이 하는 것은 우리의 클라이언트 area의 크기와 위치를 취하고, 필요한 윈도우 position과 size를 그 client size를 만들기 위해 계산할 것이다.

여기에 그 함수의 프로토타입이 있다:
BOOL AdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu);

첫 번째 파라미터는 RECT 구조체에 대한 포인터이다. 그 RECT는 요구되는 client area의 좌표를 포함하도록 지목된다. 그 함수가 호출될 떄, 그 RECT는 윈도우 area의 좌표를 포함핟록 수정된다.

두 번쨰 파라미터는 widnow style이다. 그 함수는 윈도우 경계의 사이즈를 결정하기 위해 이 정보를 사용한다.

세 번째 파라미터는 BOOL value인데, 그 함수에게 우리가 메뉴를 사용할지 안할지를 말해준다. 메뉴는 기술적으로 클라이언트 area의 부분이 아니다. 그래서 그것은 고려되어져야 한다.

이 함수가 실제 코드에서 어떻게 보이는가? 한 번 봐보자. 다음이 CreateWindowEx()의 호출에 대한 우리의 변경이다:

댓글 없음:

댓글 쓰기