U E D R , A S I H C RSS

레�즈프로�트/프로토타입/MFC�블버��

참고

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� 경우 ��먼트 �래스와 연관 � 수 있다.
~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;
}

코드설명

�성�

화면 핸들러를 넘겨준다.
�래스 내부�는 윈�우 핸들� 없기 때문� GetClientRect를 사용하지 못한다. 따�서 전달��로 CRect가 전달�다.

사용

getMemDC()를 통해서 �성�를 통해 확보한 메모리DC ��터를 전달받아 그림� 그린다.

파괴�

그림� 뿌려주고 ��으로 �성� 메모리와 오브�트들� 할당� 해제한다.

용�

화면� �김� 없애기 위해서 사용� 것�다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:22
Processing time 0.0046 sec