본문 바로가기

Programming/Win32&MFC&COM

CRect의 DeflateRect() 메소드

반응형

CRect는 사각형의 좌표를 저장하고 이 좌표를 더 유용하게 쓸 수 있는 메소드를 갖고 있는 클래스입니다.

이 클래스 중에는 DeflateRect()라는 메소드가 존재합니다.

이 메소드는 Deflate의 의미(오므라들다, 수축시키다)와 같이 사각형 정보를 줄이는 역할을 합니다.

DeflateRect()가 어떻게 찌그러뜨리는지 확인해 보도록 하겠습니다. 

간단하게 다이얼로그 기반으로 만들고 OnPaint() 부분을 조금 수정해 줍니다.

void CAlwaysOnTopDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CPaintDC dc(this);

		CRect Test(100, 100, 200, 200);
		dc.Rectangle(&Test);
		Test.DeflateRect(20, 40);
		dc.Rectangle(&Test);

		CDialogEx::OnPaint();
	}
}

코드 상의 else 부분이 추가가 되었습니다.

먼저 CRect의 객체를 생성하고 위치를 top = 100, left = 100, bottom = 200, right = 200으로 초기화 시킵니다.

그리고 사각형을 화면이 그려줍니다.

그리고 DeflateRect를 통해서 크기를 각각 20, 40만큼 줄이고 한 번 더 그려줍니다.

다음과 같은 결과를 확인할 수 있습니다.

가로가 20, 세로가 40이 줄었습니다.

그래서 left는 120이 되었고, top은 140, right는 180, bottom은 160이 됩니다.

그래서 가로는 20의 2배인 40, 세로는 40의 2배인 80이 줄게 되는 것입니다.

DeflateRect()는 이런 방식으로 사각형의 크기를 줄이게 됩니다.

반응형