[MFC] 더블 버퍼링

Programming/Windows Programming 2009. 6. 22. 02:29

더블 버퍼링은 그릴 때 깜박임 없이 최대한 부드럽게 표현하기 위한 것입니다.
이를 위해서 화면 DC에 직접 그려주게 되면 화면에 그려주는 과정이 드러나면서 화면이 깜박거릴수 있습니다. 그래서 Memory DC를 생성하여 메모리 비트맵을 선택 또는 Text를 출력합니다. 그리고 화면 DC로 이 Memory DC를 전송만 하면 부드럽게 화면이 출력이 됩니다.

1. 그리기에 필요한 각 Memory DC 와 비트맵 파일을 선언

CDC m_BkMemDC;
CBitmap m_BkBit;
CBitmap* m_OldBkBit;
BITMAP m_bm;

2. 비트맵 이미지 로드

this->m_BkBit.LoadBitmap( IDB_BG1 ); // Bitmap 읽기
this->m_BkBit.GetBitmap( &this->m_bm ); // 이미지의 크기 얻기

3. Paint 함수에서 그리기 - 1

CClientDC* pClientDC = new CClientDC( this );
CRect rect;
GetClientRect(&rect);
  
this->m_BkMemDC.CreateCompatibleDC( pClientDC ); // pClientDC 와 호횐되는 메모리 DC 생성
// Mem DC에서 Bitmap 오브젝트를 선택(설정)
this->m_OldBkBit = (CBitmap*)this->m_BkMemDC.SelectObject( &(this->m_BkBit) ); 

this->m_BkMemDC.SetBkColor( RGB( 0, 0, 0 ) );
this->m_BkMemDC.SetTextColor( RGB( 255, 255, 255 ) );
this->m_BkMemDC.TextOut( rect.left, 30, str );

  
4. Paint 함수에서 그리기 - 2

pClientDC->BitBlt( 0, 0, this->m_bm.bmWidth, this->m_bm.bmHeight, &(this->m_BkMemDC), 0,0, SRCCOPY );

this->m_BkMemDC.SelectObject( this->m_OldBkBit ); // DC 복원
this->m_BkMemDC.DeleteDC();

ReleaseDC( pClientDC );

'Programming > Windows Programming' 카테고리의 다른 글

라디오 버튼 그룹지정 하기  (0) 2009.08.22
IP HELP API 설정하기  (0) 2009.08.22
[MFC] Bitmap Object  (0) 2009.06.07
[MFC] GDI( Graphics Device Interface )  (0) 2009.06.07
[MFC] FileOpen  (0) 2009.06.04

설정

트랙백

댓글