고 ¶
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 그 그.
¶
그 고 .
¶
기 .