做了一个多视图的文件,每个视图都是较为复杂的绘图。但是遇到一个问题,由于绘图函数在onpaint中,若频繁刷新调用onpaint函数,则cpu的使用率非常高。刷新时没有新的绘图,只是恢复先前的显示。能不能将试图内的显示点阵当做位图内容存到内存,刷新时直接回复显示内存,这样可以避免重复繁琐的绘图,降低cpu使用。
高手关注!

解决方案 »

  1.   

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

  2.   

    添加一个CDC的成员变量m_pMemoryDC;在OnPaint中判断m_pMemoryDC是否为NULL。如果是,new CDC,然后m_pMemoryDC->CreateCompatibleDC
    再将把有的图都绘到m_pMemoryDC上。最后把m_pMemoryDC考贝到CPaintDC上。
    如果m_pMemoryDC不为NULL,直接把m_pMemoryDC拷贝到PaintDC也就是所谓的双缓存。