Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1756082
  • 博文数量: 600
  • 博客积分: 10581
  • 博客等级: 上将
  • 技术积分: 6205
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:13
文章分类
文章存档

2016年(2)

2015年(9)

2014年(8)

2013年(5)

2012年(8)

2011年(36)

2010年(34)

2009年(451)

2008年(47)

分类:

2009-10-11 13:51:12

来源:cww

我们发现,在Form或PictureBox中有一个Picture属性物件,另外还有一个Image属性物
件,Picture物件应该很清楚,它是用来存放图形资讯的,可是Image呢?它也是用来存
图形资讯,但二者不相同;Image的影像是在记忆体中、看不见的影像,这看不见的影像
对映着我们在萤上看见的影像(我们见到的是Picture物件之影像)。也就是说一共有两份
影像,一份在记体看不见的(Image),另一份看得见(Picture)。而AutoRedraw是作为切
换这二者之机制,当AutoRedraw设为False时,在上面的绘图会影响Picture,而且会立
刻让我们看到绘图的果结果,此时Form/PictureBox的hdc是Picture的Device Context
Handle。而AutoRedraw设为true时,所有绘图动作是在Image上做的,所以我们发现屏幕
上没有绘图之变化,而此时Form/PictureBox的hdc是Image的Device Context Handle(如
果您在AutoRedraw为true与False时各别列印hdc来看,两个hdc的值会不相同),而画面
上的变化是直到我们用Refresh指令时,才见得着。事实上Refresh 的指令做了以下的动
作: Set Obj.Picture = Obj.Image (Obj为Form或PictureBox);即使用看不见的那份
Image影像来覆盖Picture的影像。

这有什麽用呢?当我们使用Set Form1.Picture = LoadPicture("mypic.bmp") 後,这
mypic.bmp会同时指定给Form1的Image与Picture,而我们如果在AutoRedraw=False的情
况下绘图,所有的绘图会立刻显示,下个Refresh则所有方才的绘图会被Image的影像所
还原,因Image内的影像和Picture未绘图前的影像相同,所以好像图又回复原状了。相
对的,如果们想画一个图,而画的步骤有好几步,如果希望全部画完後才一口气显示,
那麽,就只有设AutoRedraw为True,那所有的绘图都针对Image来做,不会显示于画面,
当全画好了,就下一个Refresh的指令,就把Image的影像Copy到Picture上,而我们就能
见着啦。另外,我们如果绘图于Picture上(非Image上,即设AutoRedraw =  False),当
有其他的Window盖住我们的Window,而後再移开时,会发现方才的绘图不见了,相反的
当AutoRedraw设为True时,不管是Resize或重新Paint,都会拿记忆体的那份图来画,
所以别的Window移开时,我们Window上的绘图都还在,没有消失(所以这才叫AutoRedraw)

阅读(1302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~