Проблема двойной буферизации! !
привет;
я делаю технику двойной буферизации, чтобы нарисовать эллипс в качестве примера , и я не могу прокрутить страницу правильно, кажется, что рисунок искажается при прокручивании страницы, проект построен на классе CScrollview, так что же не так, Спасибо за ваше время
Что я уже пробовал:
я переопределяю
void Cfree_flickerView::OnEraseBkgnd(CDC* pDC)с
return true;вместо этого
return CScrollView::OnEraseBkgnd(pDC);
добавьте этот код в
void Cfree_flickerView::OnPaint() { CDC memDC; memDC.CreateCompatibleDC(&dc); Cfree_flickerView::OnDraw(&dc);<pre>}
добавьте несколько кодов
void Cfree_flickerView::OnInitialUpdate()
CSize sizeTotal; // TODO: calculate the total size of this view sizeTotal.cx = sizeTotal.cy = 2000; SetScrollSizes(MM_TEXT, sizeTotal,CSize(200,10),CSize(20,1));
наконец добавьте эти коды в
void Cfree_flickerView::OnDraw(CDC* pDC)
CRect rcTotal(CPoint(0,0),GetTotalSize()); CDC MemDC; CBitmap MemBitmap; pDC = this->GetDC(); // Get Current DC MemDC.CreateCompatibleDC(pDC); MemBitmap.CreateCompatibleBitmap(pDC, rcTotal.right, rcTotal.bottom); CBitmap *pOldBitmap = (CBitmap*)MemDC.SelectObject(&MemBitmap); MemDC.Ellipse(rcTotal); CRect rcClientx; pDC->BitBlt(0, 0, GetTotalSize().cx, GetTotalSize().cy, &MemDC, 0, 0, SRCCOPY); MemDC.SelectObject(pOldBitmap); ReleaseDC(pDC); ReleaseDC(&MemDC);