참고 ¶
MFC 기반의 코드이다.
코드 ¶
더블버퍼링 클래스 ¶
~cpp
#pragma once
class CmyDouBuffDC
{
private:
	CRect m_rt;
	CDC* m_pDC;
	CDC* m_pMemDC;
	CBitmap m_bmp;
public:
	CmyDouBuffDC(CDC *pDC, CRect rt){
		m_rt = rt;
		m_pDC = pDC;
		m_pMemDC = new CDC();
		m_pMemDC->CreateCompatibleDC(m_pDC);
		m_bmp.CreateCompatibleBitmap(m_pDC, m_rt.Width(), m_rt.Height());
		m_pMemDC->SelectObject(&m_bmp);
		m_pMemDC->Rectangle(0, 0, m_rt.Width(), m_rt.Height());
	}
	~CmyDouBuffDC(void){
		m_pDC->BitBlt(0, 0, m_rt.Width(), m_rt.Height(), m_pMemDC, 0, 0, SRCCOPY);
		m_pMemDC->DeleteDC();
		m_bmp.DeleteObject();
	}
	CDC* getMemDC(){return m_pMemDC;}
};
사용 ¶
Test는 OnDraw 상에서 하였다. OnDraw는 Invalidate를 통해서 OnPaint가 호출되면 자동으로 호출된다.
OnDraw의 경우 도큐먼트 클래스와 연관 될 수 있다.
OnDraw의 경우 도큐먼트 클래스와 연관 될 수 있다.
~cpp
void CDoubleBufferingView::OnDraw(CDC* pDC)
{
	CDoubleBufferingDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	//DoubleBuffering
	CRect rt;
	GetClientRect(&rt);
	CmyDouBuffDC *douDC = new CmyDouBuffDC(pDC, rt);
	//draw
	CDC *memdc = douDC->getMemDC();
	memdc->Ellipse(this->pmBoundBall->x - mi_ballSize, this->pmBoundBall->y - mi_ballSize,
		this->pmBoundBall->x + mi_ballSize, this->pmBoundBall->y + mi_ballSize);
	//end DoubleBuffering
	delete douDC;
}
코드설명 ¶
사용 ¶
getMemDC()를 통해서 생성자를 통해 확보한 메모리DC 포인터를 전달받아 그림을 그린다.
파괴자 ¶
그림을 뿌려주고 동적으로 생성된 메모리와 오브젝트들의 할당을 해제한다.
용도 ¶
화면의 끊김을 없애기 위해서 사용될 것이다.













