본문 바로가기

MS/MFC

GDI+ Double buffering

  void CDoubleBufferingView::OnPaint()
   {
       CPaintDC dc(this);
       CRect rlClientRect;
       GetClientRect(&rlClientRect);

       Rect rclClient(rlClientRect.left,rlClientRect.top,rlClientRect.Width(),rlClientRect.Height());

       CDC MemDC;
       MemDC.CreateCompatibleDC(&dc);
       CBitmap memBitmap;
       memBitmap.CreateCompatibleBitmap(&dc, rlClientRect.Width(),rlClientRect.Height());
       CBitmap *pOldBitmap = MemDC.SelectObject(&memBitmap);
       Graphics mem(MemDC.m_hDC);
       mem.SetSmoothingMode(SmoothingModeHighQuality);
       mem.FillRectangle(&bgBrush,rclClient); // 배경을 흰색으로 지운다
       ...
       ...
// 여기서부터 Graphics객체인 mem에 원하는 Drawing 작업을 한다.
       ...
       ...
       dc.BitBlt(0,0, rlClientRect.right, rlClientRect.bottom,&MemDC, 0, 0, SRCCOPY);

       MemDC.SelectObject(pOldBitmap);
       mem.ReleaseHDC(dc.m_hDC);
     }