鸿 网 互 联 www.68idc.cn

WinCE 双缓冲绘图 不显示有关问题 求解

来源:互联网 作者:佚名 时间:2015-10-26 08:28
WinCE 双 缓冲 绘图 不 显示 问题 求解 最近在6410上做了个双 缓冲 绘图 ,view中OnDraw()下的代码入下: //获取文档指针 CServerUIDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); //作图,采用双 缓冲 CDC MemDC;//定义 显示 设备对象 CBitmap MemBitmap
WinCE 双缓冲绘图显示问题 求解
最近在6410上做了个双缓冲绘图,view中OnDraw()下的代码入下:
//获取文档指针
CServerUIDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//作图,采用双缓冲
CDC MemDC; //定义显示设备对象
CBitmap MemBitmap; //定义位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示兼容的内存显示设备
//获取客户区大小
CRect rect;
GetClientRect(&rect);
MemBitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); //建立与屏幕显示兼容的位图
CBitmap* pOldBlt = MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备中,用于作图
MemDC.FillSolidRect(&rect,RGB(255,255,255)); //用背景色将位图清除干净
DrawState(&MemDC,pDoc); //作图函数
//将内存中的位图拷贝到屏幕中显示
if(!pDC->BitBlt(rect.left,rect.top,rect.Width(), rect.Height(),&MemDC,rect.left,rect.top,SRCCOPY))
TRACE(_T("BitBlt Error"));
//绘图完成后的清理工作
MemBitmap.DeleteObject();
MemDC.SelectObject(pOldBlt);
MemDC.DeleteDC();

  这个程序开始1分钟内,运行很好,随着DOC中数字的改变,图形也实时刷新,但是运行一段时间后就不再刷新了,我跟踪到DrawState绘图函数里面去看时,发现数据还在实时变化,作图用的也是刷新后的数据,但是新作的图并没拷贝到屏幕上去,难道是双缓冲问题吗?搞不懂。我把双缓冲去掉,一切正常,而且这个双缓冲程序在Windows下运行时正常的,为什么在Wince下不行呢,哪位高手能帮我分析下……


------解决方案--------------------------------------------------------
顶。。。最近也在做界面,经常是模拟器下运行没问题,下载到板子上就不行了。。。应该是wince系统资源的问题吧。。。
------解决方案--------------------------------------------------------
MemBitmap.DeleteObject();
MemDC.SelectObject(pOldBlt);

我觉得这两句代码反了

MemDC.SelectObject(pOldBlt);
MemBitmap.DeleteObject();
网友评论
<