使用双缓冲绘图时出现错误!

xianbin 2004-08-12 09:44:37
按:http://community.csdn.net/Expert/topic/3119/3119399.xml?temp=.4067957
使用了双缓冲,但是不知道为什么我的代码出现如下错误:
=======================================================
应用程序发生异常 unknown software exception(0x80000003),位置0x77f813b1.
========================================================
源代码如下:
/////////////////////////////////////////////////////////////////////////////
// CFootBallGMView drawing

void CFootBallGMView::OnDraw(CDC* pDC)
{
CFootBallGMDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CDC MemDC;
CBitmap MemBitmap;
//CRectangle rect;
CRect rc;
GetClientRect( rc );

int nWidth, nHeight; // 取用户区大小
nWidth = rc.Width();
nHeight = rc.Height();


MemDC.CreateCompatibleDC( NULL );
MemBitmap.CreateCompatibleBitmap( pDC, nWidth, nHeight );
CBitmap *pOldBit = MemDC.SelectObject( &MemBitmap );
MemDC.FillSolidRect( 0, 0, nWidth, nHeight, RGB(255, 255, 255) );

POINT point;
POINT lpoint;
point.x = 100;
point.y = 100;
lpoint.x = 200;
lpoint.y = 200;

while(1)
{
Invalidate();
MemDC.MoveTo( point );
MemDC.LineTo( lpoint );

pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
}
...全文
209 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjhd0 2004-08-12
  • 打赏
  • 举报
回复
MemDC.CreateCompatibleDC( pDC);
xianbin 2004-08-12
  • 打赏
  • 举报
回复
我想实现动画效果,所以要弄个循环不断的变化线条。
qqhuangshen 2004-08-12
  • 打赏
  • 举报
回复
楼上的错了
MemDC.CreateCompatibleDC(NULL);就是默认的这个pDC;
楼主的程序错就错在在循环中反复释放MemBitmap和MemDC,这样肯定会造成内存错误
所以删掉两句,在循环的最后释放

另外,我不明白楼主为什么实现双缓存的时候要设置这么一个循环,这样反复刷新程序一直不能捕获屏幕焦点。其实,在OnEraseBkgn() 中简单的返回一个TRUE就可以了,楼主可以看程序为什么要画一个FillSolidRect(),这样在每次刷新的时候相当于背景的作用。便可以实现双缓存的目的
DentistryDoctor 2004-08-12
  • 打赏
  • 举报
回复
如楼上所说,别外
while(1) // Y?
{
Invalidate(); //Y?
MemDC.MoveTo( point );
MemDC.LineTo( lpoint );

pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();//Y?
MemDC.DeleteDC();/Y?
}

19,466

社区成员

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

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