2012/02/16 12:06
1. 덧그리고 싶은 컨트롤을 상속받는 클래스를 만든다.

2. 메시지 맵을 만들어서 WM_PAINT를 잡아오게 해 놓고, OnPaint를 override한다.

3. OnPaint의 내용

CPaintDC dc(this); //그리기 위한 dc를 따옴
CDC memDC;
memDC.CreateCompatibleDC(&dc); //이거 빼먹으면 아마 안그려질걸? memDC 생성

CRect rcClip, rcClient;
dc.GetClipBox(&rcClip); //GetClipBox는 다시 그려야 하는 영역을 구해 준다. 절약 정신.
GetClientRect(&rcClient);

CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height());
memDC.SelectObject(&bitmap); //rcClient랑 똑같은 넓이의 비트맵 만들어서 그릴 준비

CWnd::DefWindowProc(WM_PAINT, (WPARAM)memDC.m_hDC, 0); 
//요걸 호출해 주면! 상위 클래스의 WM_PAINT 처리 결과를 memDC에 담을 수 있다
//즉 원본 컨트롤이 그려주고 있는 것들이 memDC에 그려진다


//여기서 내맘대로 씹고 뜯고 맛보고 즐기고


dc.BitBlt(rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(), &memDC, 
rcClip.left, rcClip.top, SRCCOPY);
//필요한 만큼(rcClip)만 복사해 주면 된다 

memDC.DeleteDC();
 

'개발' 카테고리의 다른 글

[MFC] 특정 컨트롤 위에 덧그리기  (0) 2012/02/16
Excel 자동화 자투리(2)  (0) 2012/01/27
Excel 자동화 자투리(1)  (0) 2012/01/26
페이스북 앱  (0) 2012/01/17
홈플러스 어플 설치기  (0) 2012/01/09
Posted by 김세훈님