如何使用bitblt函数?

xiao_xiao_zi 2005-04-20 02:30:34
帮我看看下面的代码,为什么没有任何显示??
void CQ2View::OnDraw(CDC* pDC)
{
CQ2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

vector<CGraphBase*>::iterator iter;
DCUsed=0;
// CDC* pDC=this->GetDC();
CDC* pMemDC=new CDC();
pMemDC->CreateCompatibleDC(pDC);
CRect oRect;
GetClientRect(oRect);
for (iter=Graph.begin();iter!=Graph.end();++iter)
{
CDC* pTempDC=new CDC();
pTempDC->CreateCompatibleDC(pMemDC);
CGraphBase* pBase=*iter;
pBase->Draw(pTempDC);
pMemDC->BitBlt(0,0,oRect.Width(),oRect.Height(),pTempDC,0,0,SRCPAINT);
ReleaseDC(pTempDC);
delete pTempDC;
}

pDC->BitBlt(0,0,oRect.Width(),oRect.Height(),pMemDC,0,0,SRCPAINT);

pBase->Draw(CDC *pDC);在传入的CDC对象上画图
bool CRectangle::Draw(CDC *pDC)

{
m_PosX+=m_SpeedX;
m_PosY+=m_SpeedY;
CPen* pPen=new CPen(m_PenStyle,m_PenWidth,m_PenColor);
CBrush* pBrush=new CBrush(m_BrushColor);
CPen* pOldPen=pDC->SelectObject(pPen);
CBrush* pOldBrush=pDC->SelectObject(pBrush);
pDC->Rectangle(m_PosX,m_PosY,m_PosX+m_Width,m_PosY+m_Height);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
pPen->DeleteObject();
pBrush->DeleteObject();
delete pPen;
delete pBrush;
}

为什么没有显示啊?
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qjzrd 2005-04-20
  • 打赏
  • 举报
回复
学习
菜牛 2005-04-20
  • 打赏
  • 举报
回复
内存DC中要选入内存位图;BitBlt时的宽度、高度不要超过内存位图的宽度、高度;内存位图不要用RealseDC(),而是DeleteDC();
bluebohe 2005-04-20
  • 打赏
  • 举报
回复
for (iter=Graph.begin();iter!=Graph.end();++iter)
{
CDC* pTempDC=new CDC();
pTempDC->CreateCompatibleDC(pMemDC);
CGraphBase* pBase=*iter;
pBase->Draw(pTempDC);
pMemDC->BitBlt(0,0,oRect.Width(),oRect.Height(),pTempDC,0,0,SRCPAINT);
ReleaseDC(pTempDC);
delete pTempDC;
}



pTempDC->CreateCompatibleDC(pMemDC);-->
pTempDC->CreateCompatibleDC(pDC);

试试吧,估计是这样

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧