안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2013년 1월 17일 목요일

[MFC] OnEraseBkgnd 사용해서 배경화면 그리기

 각탭을 구성하는 대화상자인 TabView1, TabView2 의 배경색을 
 변경하고자 한다면 OnPaint 가 아닌 OnEraseBkgnd 함수에서 하셔야 합니다. 

 WM_ERASEBKGND 메시지는 대화상자기반에서 클래스위저드 목록에 나오지않습니다. 하지만, 설정
 만 조금 바꾸시면 사용하실수 있습니다. ^^;; 일단, 클래스 위저드를 실행하고.. class info 탭을 
 선택하고, Message filter를 Dialog에서 window로 바꾸어 주시고 다시 Message Maps에 가시면 
 해당 메시지가 보일겁니다... ^^;

출처 : http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=10381

위와 같이 WM_ERASEBKGND 메세지를 이용하여,
OnEraseBkgnd를 사용한다.

BOOL CHoneybeeView::OnEraseBkgnd(CDC* pDC)
{
 // TODO: Add your message handler code here and/or call default
 CBrush backBrush(RGB(255, 255, 255)); // <- 흰색칼러로.
 CBrush* pOldBrush = pDC->SelectObject(&backBrush);
 CRect rect;
 pDC->GetClipBox(&rect);
 pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
 pDC->SelectObject(pOldBrush);

 return TRUE; //흰 배경이 아닌 배경을 그리면 true, 흰 배경 false
}

OnEraseBkgnd 함수에 위와 같이 넣으면, RGB 컬러로 배경이 지정되게 된다.

OnEraseBkgnd는 OnDraw와 달리, 배경을 그려주는 것이라서,

새로 배경을 그리게 될 때, 다른 탭 위에 나타나지 않는 듯하다.

OnDraw의 경우, 새로 그릴 때, 탭 위에 잠시 나타났다 사라지지만,

OnEraseBkgnd의 경우는 그렇지 않다.