不行吧,我是Invalidate该区域。如果重绘的区域不大,应该感觉不到

解决方案 »

  1.   

    双缓冲区是不需要擦除的,也不需要手工Invalidate一块区域,先在 back buffer 重绘这一区域的背景(即是重绘整个背景区也可以),再画前景,再交换前后buffer就可以了。效果不错的。另外,.net本身绘图效率不高,你看微软公开的Quake II源码的运行效果就知道了。
      

  2.   

    楼上说的不太明白,我现在就是用双缓冲,在buffer graphics里绘图,然后Paint里绘制buffer bitmap,这样整图看效果不错。
    我说的是,当需要某一个小块区域需要重绘时,重现的效果,我把buffer graphics里只一小块区域重绘了,然后invalidate该小块区域,可以明显看到背景和绘制的前景出现交错了,怎么避免这一现象,(就是直接替换该区域原有图像,而不出现背景交错,以避免闪烁)
      

  3.   

    to fansenwei(绿茵萤火虫) :
        .net已经提供了双缓冲,只要设置一下属性即可获得双缓冲功能,除此一以外,不必自己再做任何多余的工作,看你的表述,好象还是自己实现的双缓冲,没有必要这样做,不必创建buffer graphics,
      

  4.   

    老兄说的我没有实践过阿,是这个么
    this.SetStyle(ControlStyles.ResizeRedraw,true);
    this.SetStyle(ControlStyles.DoubleBuffer,true);
    this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);
    this.SetStyle(ControlStyles.UserPaint,true);
    this.UpdateStyles();
    我把它加到自定义控件里,运行就出错
      

  5.   

    未处理的“System.ArgumentException”类型的异常出现在 system.drawing.dll 中。其他信息: 使用了无效参数。
      

  6.   

    谢谢楼上,结合这个.net的双缓冲,我的目的已经达到了,刚才出错的原因是我在Paint的 g.Dispose()了一下