我在OnDraw函数里使用双缓冲显示图片,但在滚动视图是出现重叠,不知道如何解决,求教
以下为代码
void CArEditorView::OnDraw(CDC* pDC)
{
CArEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
GetClientRect(m_BKRect);
CDC* dc=new CDC();
CBitmap* bmp=new CBitmap();
dc->CreateCompatibleDC(pDC);
bmp->CreateCompatibleBitmap(pDC,m_BKRect.Width(),m_BKRect.Height());
dc->SelectObject(bmp);
//绘制内容
//画背景
dc->FillRect(m_BKRect,&m_BKBrush);
//画页背景布,会出现断层
dc->FillRect(&pDoc->m_PageList.m_Current->m_Page.m_Rect,&CBrush(pDoc->m_PageList.m_Current->m_Page.m_Color));
//逐层显示本页的对象,这个可以不用看
if(m_BKRect.Height()>0)
{
if(pDoc->m_PageList.m_Current->m_Page.m_ObjectCount>0)
{
int layer_num,object_num;
AR1_MYLAYER* layer=pDoc->m_PageList.m_Current->m_LayerList.m_Head;
AR1_MYOBJECT* object;
layer_num=1;
while(layer_num<=pDoc->m_PageList.m_Current->m_Page.m_LayerCount)
{
if(layer->m_Layer.m_ObjectCount>0)
{
object_num=1;
object=layer->m_ObjectList.m_Head;
while(object_num<=layer->m_ObjectList.m_ObjectCount)
{
CString str;
str.Format("%s//page%d//layer%d//object%d.%s",pDoc->m_DocCachePath,pDoc->m_PageList.m_CurrentNO,layer_num,object_num,object->m_ObjectInfo.m_Type);
m_Image=new CImage();
m_Image->Load(str);
m_Image->Draw(dc->m_hDC,object->m_ObjectInfo.m_Rect);
m_Image->Destroy();
delete m_Image;
m_Image=NULL;
object=object->m_Next;
object_num++;
}
}
layer=layer->m_Next;
layer_num++;
}
}
}
//绘制内容结束
SetScrollSizes(MM_TEXT,pDoc->m_PageList.m_Current->m_Page.m_ScrollSize);
//复制内存DC
pDC->BitBlt(0,0,m_BKRect.Width(),m_BKRect.Height(),dc,0,0,SRCCOPY);
//删除内存DC
dc->DeleteDC();
delete dc;
dc=NULL;
//删除内存CBitmap
bmp->DeleteObject();
delete bmp;
bmp=NULL;
}
滚动函数
BOOL CArEditorView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
GetClientRect(m_BKRect);
if(m_BKRect.Height()<GetDocument()->m_PageList.m_Current->m_Page.m_ScrollSize.cy)
{
m_ScrollPoint=GetScrollPosition();
if(zDelta>0) //鼠标上滚
m_ScrollPoint.y-=20;
else //鼠标下滚
m_ScrollPoint.y+=20;
ScrollToPosition(m_ScrollPoint);
}
return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
}
以下为程序问题图片