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

Direct2D - Resize() 본문

DEV/Direct2D

Direct2D - Resize()

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

HwndRenderTarget의 크기를 조절하는 함수


Index

  • Resize
    • 함수 원형
      • D2D1_SIZE_U
    • 사용 예제

Script from F.R.I.D.A.Y


Resizecopy^

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

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

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

 

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

 

함수 원형copy^

HRESULT Resize(
  const D2D1_SIZE_U *pixelSize
);

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

 

D2D1_SIZE_Ucopy^

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

D2D1::SizeU(width, height)

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

 

 

사용 예제copy^

 이 함수는 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(...);
}

 

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