picturebox控件的 autoredrew 属性的本质含义是什么?
---------------------------------
字面上的意思就是自动重绘,可是他的重绘间隔是多长时间呢?
按理说,对于自动重绘的话,速度会变慢,比如 msflexgrid 就是,将自动重绘关了,速度会很大提高。但是我发现picturebox正好相反,
我的picturebox刷新比较慢,发现原来默认是 false,现在我将它改成 true 了,发现刷新速度快了。
这是为什么呢?按理说,应该是手工重绘它更快呀?比如我从数据库通过循环取数据,然后在picturebox和打出来,我理解是全部print完了,再整体显示这个picturebox会快些,所以我将 autoredrew 设成 false,但是我的思路是错的,我将它改成 true ,速度就有了提高,这是为什么呢?
比如我有20个循环,print 20 次,是全部print完了刷新快呢?还是 print 一个就刷新快呢?

解决方案 »

  1.   

    楼主的理解有误,不能望文生义. 其实这个属性和"重绘"没啥关系.
    AUTOREDRAW为TRUE时,控件会为显示的图像保留缓冲区,这样即使控件被其他窗体遮挡后重新回到前台,依然能保持原来的图像. 而当FALSE时, 当前绘制的图像一旦被其他窗体遮盖住,遮盖部分就丢失了.
    可以楼主一时难以体会,总结一下几个用法给你:
    1: 如果你要用PICTURE或FORM之类有这个属性的对象输出图像,那么就设为TRUR,别忘记输出完之后用一下PICTURE.REFRESHL来将缓冲图像显示出来. 此时的图像可以用SAVEPICTURE保存2: 如果不在意图像被遮盖而丢失的,也不用来保存的,那设为FALSE也无妨. 
      

  2.   

    AutoRedraw = True 后,所有的绘图操作其实是对后台的绘图缓冲区进行更新,不再直接刷到前台显存中。
    至于刷新的时机
    1)调用绘图函数后,不过存在一定的优化,多次连续的绘图操作会合并成一次刷新。
    2)调用 Refresh 函数强制刷新。
    3)在窗体切换、更改大小时有系统触发的重绘消息。
      

  3.   

    autoredrew 的内部实现是很复杂的,需要写很多代码。我曾经看到有人写的 autoredrew 的代码,现在找不到了。 
      

  4.   

    AutoRedraw = True会减少你频繁绘图时的闪烁感,毕竟他把有些多次上屏的操作合成为一次了啊
      

  5.   

    AutoRedraw 属性
          返回或设置从图形方法到持久图形.的输出。语法object.AutoRedraw [= boolean]AutoRedraw 属性语法包含下面部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的一个对象。 
    Boolean 布尔表达式,指定如何重绘对象,“设置值”中有详细描述。 
    设置值boolean 的设置值如下:设置值 描述 
    True 使 Form 对象或 PictureBox 控件的自动重绘有效。图形和文本输出到屏幕,并存储在内存的图象中。该对象不接受绘制事件,必要时,用存储在内存中的图象进行重绘。 
    False (缺省值)使对象的自动重绘无效,且将图形或文本只写到屏幕上。 当需要重画该对象时,Visual Basic 会激活对象绘制事件。 
    说明使用下列图形方法工作,如:Circle、Cls、Line、Point、Print 和 Pset,该属性极为重要。利用这些方法,在改变对象大小或隐藏在另一个对象后又重新显示的情况下,设置 AutoRedraw 为 True,将在 Form 或 PictureBox 控件中自动重绘输出。 运行时 在程序中设置 AutoRedraw,可以在画持久图形(如背景色或网格)和临时图形之间切换。如果设置 AutoRedraw 为 False,以前的输出成为背景屏幕的一部分。当 AutoRedraw 设置为 False,用 Cls 方法清除绘图区时不会删除背景图形。把 AutoRedraw 改回 True 后,再用 Cls 将清除背景图形。注意 如果设置 BackColor 属性,所有图形和文本,包括持久图形,都被清除。一般来说,除非 AutoRedraw 设置为 True,所有图形都需用 Paint 事件显示。要取回在 AutoRedraw 设置为 True 时创建的持久图形,用 Image 属性。当 AutoRedraw 设置为 True 时,用对象的 hDC 属性可以将持久图形传送给Windows API。如果设置窗体的 AutoRedraw 属性为 False,然后最小化该窗体,则将 ScaleHeight 和 ScaleWidth 属性设置为图标大小。在 AutoRedraw 设置为 True 时,ScaleHeight 和 ScaleWidth 保持为恢复窗口的尺寸。如果设置 AutoRedraw 属性为 False,Print 方法将在诸如 Image 和 Shape 等图形控件的顶部打印。