目前有个项目是将大量数据实时显示出来的问题。视图是基于CView的。基本流程是在OnDraw函数里根据GetClipBox获得的区域刷新。当有新数据到来时,重设滚动条并调用OnScroll函数,刷新最新一行数据——通过分析代码,在OnScroll过程中,操作系统保存了当前屏幕的内容进行的移动,空出很小的绘制最新数据的地方,然后仅重绘这块数据即可。以前软件运行都很正常,最新增加了新的大型数据耗时较多,定时滚屏显示本身也没有问题。但是当有窗口停留在表面时,发现GetClipBox得到的区域底部为浮动窗口的下部,此时重绘区域大大增加——这个过程消耗了大量的系统时间,操作受到影响。请各位专家不吝赐教。当然如果有其他好的方法来实现也可作为参考。

解决方案 »

  1.   

    整个绘和绘局部,效果不明显,都是调用完整的WM_PAINT,
      

  2.   

    1.建立一块画布和后台dc
    2.屏幕画满之后把视图里的内容拷贝到这2个成员里。
    3.以后绘制新数据时,从画布的offsetY开始拷贝到视图dc,loop 2.
      

  3.   

    建立一块画布和后台dc,是内存DC吗?画布是指内存位图吗?
      

  4.   

    正在构思,如果GetClipBox得到的区域是因为前台窗口导致变大,是否可以仅重绘前台窗口的上部小区域和下部小区域