프로그래밍/MFC

더블 버퍼링 구현 방법

이재만박사 2016. 12. 8. 17:38

* 핵심은 모든 그리는 것을 비트맵에 그리고 나중에 

화면에 결과 비트맵을 보여준다


기존 DC 와 호환되는 Memory DC를 생성하고 거기에 비트맵을 선택하여

Memory DC를 이용하여 그림을 그린 다음

Bitmap을 기존 DC를 이용하여 그려준다



다시 순서를 정리하면


1. 기존 DC와 호환되는 Memory DC 객체 생성 - CreateCompatibleDC( );


2. 기존 DC와 호환되는 비트맵 객체 생성 - CreateCompatibleBitmap( );


3. 메모리 DC가 비트맵 객체를 선택 - SelectObject( )


4. 메모리 DC를 가지고 그림을 그림 - MoveTo, LineTo, Ellipse, Rect 등등


5. 비트맵 객체를 기존 DC를 가지고 그려줌 - BitBlt( )


6. 메모리 객체 해제


void CView::OnPaint(CDC* pDC)

{

// 1. memDC 객체 생성

CDC memDC;

memDC.CreateCompatibleDC(pDC);


// 2. 메모리 비트맵 생성

    CRect rect;

    GetClientRect(rect);

    CBitmap bitmap;

    bitmap.CreateCompatibleBitmap(pDC, rect.Width()rect.Height());


// 3. 메모리 DC 가 메모리 비트맵 선택

   CBitmap* oldmap = memDC.SelectObject(&bitmap);


// 4. 그려주기

   memDC.MoveTo(0, 0);

   memDC.LineTo(100, 100);


// 5. 그려주기

   pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);


// 6. 메모리 객체 해제

    memDC.SelectObject(oldmap);

    memDC.DeleteDC();

    bitmap.DelectObject();

}