象mspaint,他的滚动时,基本上不影响CPU。
但我用的是双缓冲,
所以在滚动“滚动条”时,用缓冲的bmp复制到视图。
但这样,CPU很容易到100%的。
在不动CView重画时,就基本上不影响CPU。问题是:滚动“滚动条”时,是不是一定要自己重画CView么?
        重画时,使用什么方法即可以用双缓冲,又不很大地影响CPU?

解决方案 »

  1.   

    我的一点简单建议:
    在处理程序的重画问题时,我们要分清我们重新绘图的目的:有些时候我们需要重新绘图是因为图像部分被遮挡、从不可见变为可见等等。而另外一种情况就是:和这些图像相关的数据发生了变化,需要我们来绘制一幅全新的图片。因此在重新绘图时有必要对他们区别对待,对于第一种情况,我们需要做的是把先前的图像重新绘制到屏幕上而不需要重复产生图像的过场。在第二种情况下,我们首先需要进行图像的产生过程,然后才是第一步的工作。
    因此,我建议在屏幕种准备一张和你需要绘制的图像相同大小的兼容位图,在出现第一种情形时,在正确的地方绘图(某些函数有这个参数的)。出现第二种情况时,才重复产生图像的过程(但是不要浪费先前的那张位图,他有时候是可以重新利用的)。如果需要绘制非常复杂的图形,可以创建多张兼容位图。
    如果要避免闪烁,不要让默认的函数处理WM_ERASEBKGND消息,在PAINT的过程中由你自己来完成这个过程。
      

  2.   

    不是重画CVIew。是重画客户区。在WM_PAINT里,要编程的。