多视图程序如何保存各视图显示内容到内存,而在OnPaint函数中不再重复绘图,只是恢复。

chen_pin 2009-11-10 01:21:06
做了一个多视图的文件,每个视图都是较为复杂的绘图。但是遇到一个问题,由于绘图函数在onpaint中,若频繁刷新调用onpaint函数,则cpu的使用率非常高。刷新时没有新的绘图,只是恢复先前的显示。能不能将试图内的显示点阵当做位图内容存到内存,刷新时直接回复显示内存,这样可以避免重复繁琐的绘图,降低cpu使用。
高手关注!
...全文
64 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wfx_net 2009-11-10
  • 打赏
  • 举报
回复
添加一个CDC的成员变量m_pMemoryDC;

在OnPaint中判断m_pMemoryDC是否为NULL。如果是,new CDC,然后m_pMemoryDC->CreateCompatibleDC
再将把有的图都绘到m_pMemoryDC上。最后把m_pMemoryDC考贝到CPaintDC上。
如果m_pMemoryDC不为NULL,直接把m_pMemoryDC拷贝到PaintDC

也就是所谓的双缓存。
fandh 2009-11-10
  • 打赏
  • 举报
回复
这是非常常用的作法,视图要显示的东西,先在BMP上面画,然后,贴出来,如果有数据改动,再重画BMP。这样做不仅仅能提高效率,如果再处理的好的话,还能减少闪烁!
你可以在网上收双缓冲画图!
不过,如果你还有中间绘图信息的话,建议再加一个BMP2,具体这样:数据改动的时候,重画BMP,如果中间数据改动的时候(可能是比较频繁的小数据,比如选择、拖动什么的),重画BMP2(重画的过程,就是先将BMP拷贝到BMP2,然后在这个基础上,在BMP2上重画中间数据);显示的时候,直接将BMP2数据显示出来!
这样做,极大的提高了绘图效率,处理好的话基本没有什么闪烁。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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