F.R.I.D.A.Y.

Direct2D - Resize() 본문

DEV/Direct2D

Direct2D - Resize()

F.R.I.D.A.Y. 2021. 4. 4. 13:47
반응형

HwndRenderTarget의 크기를 조절하는 함수


Resize

 HwndRenderTarget의 크기는 능동적으로 변경되지 않는다. 렌더링 타겟인 윈도우의 크기가 변경되면 HwndRenderTarget의 크기가 자동으로 윈도우 크기에 맞춰 조정되지 않는다는 것이다.

 이렇게 렌더링 타겟의 크기는 그대로, 윈도우의 크기는 바뀌게 되면 아래와 같은 문제가 발생하곤 한다.

기본 창으로 열어서 사각형을 그렸을 때(왼쪽)와 그 상태에서 윈도우의 너비(width)를 줄였을 때. 사각형이 찌그려졌다.

 

 이 문제의 원인은 위에서 설명한 것처럼 윈도우의 클라이언트 영역 크기와 렌더링 타겟에서 인식하고 있는 영역의 크기가 서로 다르기 때문에 발생하는 문제이다.

 

함수 원형

HRESULT Resize(
  const D2D1_SIZE_U *pixelSize
);

 렌더링 타겟의 크기를 설정하는 인자 하나를 받는다.

 

D2D1_SIZE_U

 렌더링 타겟의 크기를 설정하기 위한 인자이다.

D2D1::SizeU(width, height)

 이 메서드를 이용하면 따로 D2D1_SIZE_U 구조체를 생성하지 않더라도 바로 이용할 수 있다.

 

 

사용 예제

 이 함수는 WM_SIZE 메시지가 들어왔을 때 함께 넣어주면 큰 무리 없이 렌더링 타겟의 크기를 조절할 수 있다.

ID2D1HwndRenderTarget* pRT;
// ID2D1HwndRenderTarget 객체가 이미 만들어졌다고 가정한다.

LRESULT CALLBACK WindowProc(...){

	switch(uMsg){
    	case WM_SIZE:
        	RECT rect;
            GetClientRect(hWnd, &rect);
            
            pRT->Resize(D2D1::SizeU(rect.right - rect.left, rect.bottom - rect.top));
            return 0;
    }

	return DefWindowProc(...);
}

 

# index

728x90
반응형

'DEV > Direct2D' 카테고리의 다른 글

Direct2D - ID2D1SolidColorBrush  (0) 2021.04.05
Direct2D - DrawRectangle()  (0) 2021.04.05
Direct2D - Clear()  (0) 2021.04.04
Direct2D - D2D1CreateFactory()  (0) 2021.04.04
Direct2D - CreateHwndRenderTarget()  (0) 2021.04.04
Comments