万恶的对话框画图~背景图带滚动条,双缓冲,问题是我拖动画上去的图,旧的图没擦除
如题,我的背景图是动态导入的,在一个文件夹中有很多可选的,当我不导背景的时候,拖动图元很正常,可是导入背景图后拖动图元旧的不擦除,重新再随便导个背景旧的就擦除了。。
贴上部分代码
在OnPaint中:
CPaintDC dc(this);
Redraw();
CDialog::OnPaint();
在自定义的Redraw()中:
C/C++ code
在OnEraseBkgnd()中:
C/C++ code
谢谢大家了~为什么画上去的会始终存在,拖动也不能擦除
贴上部分代码
在OnPaint中:
CPaintDC dc(this);
Redraw();
CDialog::OnPaint();
在自定义的Redraw()中:
C/C++ code
CDC *pDC=GetDC(); CDC MemDC; CRect rcclient; GetClientRect(&rcclient); MemDC.CreateCompatibleDC( pDC); if (ExistBK==TRUE) { if (bk_flag==1) { VERIFY(m_hBmpOld = (HBITMAP)SelectObject(MemDC,m_hBmpTemp) ); bk_flag=0; } else { SelectObject(MemDC,m_hBmpTemp); } for (int i=0;i<ptrArray.GetSize();i++) { ((PicElement *)ptrArray.GetAt(i))->DrawElement(&MemDC); } pDC->BitBlt(offsetx,offsety,m_size.cx,m_size.cy, &MemDC, sourcex, sourcey,SRCCOPY); erase=false; MemDC.DeleteDC(); } else { CBitmap MemBitmap; MemBitmap.CreateCompatibleBitmap(pDC,rcclient.right,rcclient.bottom); CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap); MemDC.BitBlt(rcclient.left,rcclient.top,rcclient.right,rcclient.bottom,pDC,0,0,SRCCOPY); for (int i=0;i<ptrArray.GetSize();i++) { ((PicElement *)ptrArray.GetAt(i))->DrawElement(&MemDC); } pDC->BitBlt(rcclient.left,rcclient.top,rcclient.right,rcclient.bottom,&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBit); MemBitmap.DeleteObject(); MemDC.DeleteDC(); } ReleaseDC(pDC);
在OnEraseBkgnd()中:
C/C++ code
if (erase) { return false; } else { CRect rcClient; GetClientRect(&rcClient); rcClient.bottom-=(TOOLBAR_HEIGHT); pDC->FillRect(&rcClient,&m_brBk); return TRUE; }
谢谢大家了~为什么画上去的会始终存在,拖动也不能擦除
作者: zwhz99 发布时间: 2011-06-16
补充说明一下OnEraseBkgnd()中的m_brBk是个白色的画刷
当我动态选择背景图之后HBITMAP m_hBmpTemp保存了选择的背景图,然后ExistBK=TRUE;
offsetx,offsety,m_size.cx,m_size.cy, sourcex, sourcey,都是跟滚动相关的
ptrArray保存了我画上去的所有图
当我动态选择背景图之后HBITMAP m_hBmpTemp保存了选择的背景图,然后ExistBK=TRUE;
offsetx,offsety,m_size.cx,m_size.cy, sourcex, sourcey,都是跟滚动相关的
ptrArray保存了我画上去的所有图
作者: zwhz99 发布时间: 2011-06-16