VB:AutoRedraw和Paint事件对持久性的影响

ZDNet软件频道 时间:2004-06-02 作者:Builder.com |  我要评论()
本文关键词:vb
当你使用VB进行绘图时,理解AutoRedraw属性和Paint事件是非常重要的。VB的绘图方法可以让程序员在窗口或Picture Box等控件上创作图形,该方法包括Circle、Line、PaintPicture、Print以及Pset,而AutoRedraw 和Paint和这些方法有密切关系。
本文译自Builder.com,未经许可请勿转载

当你使用vb进行绘图时,理解AutoRedraw属性和Paint事件是非常重要的。vb的绘图方法可以让程序员在窗口或Picture Box等控件上创作图形,该方法包括Circle、Line、PaintPicture、Print以及Pset,而AutoRedraw 和Paint和这些方法有密切关系。

事实上,很多绘图方法并不会按照你所预期的那样工作。只要进行一个小实验你就会明白了:新建一个标准EXE项目,然后在窗口Click事件中加入如下代码:

Me.Circle (1500, 1500), 600

现在进入运行时检查这个程序的运行情况。点击窗口,你会看到一个圆形,但这个图案马上就消失了。不管你重复点击多少次,窗口上永远也不会留下你绘制的图案。为什么这个圆无法保留在屏幕上呢?

答案就是持久性问题。窗口和窗口中的全部控件都具有持久性。这意味着vb会在内存中保留窗口和空间的内容,并在它们隐藏时及时重绘窗口,使它们再出现在屏幕上。与此相反,绘制的图形不具有持久性,它们只是绘制在屏幕上而已,并没有在内存中保留,因此当窗口隐藏又被重绘后,图案由于没有被重绘,所以消失了。

有两种方法可以确保绘制的图形具有持久性。第一种方法是将窗口的AutoRedraw属性设为True。这会确保任何绘图方法所输出的图形都会保存在内存中,这样输出的图案就具有了持久性,可以进行重绘了。

第二种方法是在窗口的Paint事件中进行绘图。Paint事件会在窗口第一次显示时被触发,之后每次窗口重绘,Paint事件都会再次被触发。要想看看这种方法的效果,只需要把刚才的代码从Click事件移到Paint事件即可,你会发现窗口启动时就会出现一个圆形,并且当窗口从最小化恢复后,图案依然存在。

需要注意的是,当AutoRedraw属性被设为True时,Paint事件就不再被触发了。至于要选用何种方法,完全看你的程序要求。一般来说,将AutoRedraw属性设为True可以简化程序,但它会耗费一定的内存空间,尤其是当图形比较复杂时,它会使显示速度变慢。

需要记住的是,持久性问题只出现在绘图方法中,而控件、位图、metafiles等则都具有持久性。


作者:Peter Aitken。自从Visual Basic 1.0版问世以来,Peter Aitken就一直在使用vb编程。他已经编写过很多关于VisualBasic以及其他计算机和编程方面的书籍和杂志文章了。


责任编辑:李宁

欢迎评论投稿
用户评论
用户名
评论内容
发表时间
ZDNet网友
2011-07-08 00:17:09
- 发表评论 -
匿名
注册用户

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134