|
VB是面向对象的编程工具,这里引用《Thinking In Java》里面的一句话:一切皆对象。
很多人并不明白什么是面向对象,即使他也能写出想要的东西,因为VB一开始就已经是这样了。
一打开VB,就是一个窗体,这就是一个对象。在上面画一个按钮,一个文本框……都是在创建对
象,只是这个过程被VB封装了。
但是从使用中可以切实地感受到对象编程的方便性,这可以举出很多例子:
如果想设置文本颜色,应该怎么做?
在VB中,可以这么写:Me.Text1.ForeColor = vbRed
正因为是对象编程,所以文本框可以有各种属性,很简单地就能调用它。
那么看一下其他情况下应该怎么做?
应当调用这个API,传入文本框的设备场景,设置颜色。
Declare Function SetTextColor Lib "gdi32" Alias "SetTextColor" (ByVal hdc As Long,
ByVal crColor As Long) As Long
当然,这个API太简单了,很难体现出对象的方便性。那我们再来看看一个特殊的控件<Label>
这个是一个什么东西?没有句柄,没有场景,MS系统控件应有的东西都没有,它是一个对象。
我个人认为这个只是VB中的一个类,因为它有属性,可以设置它的文本,颜色,背景,大小,对
齐方式等等,在我眼中,它只是几个API的封装。
接下来我们来讨论一下它为什么效率不高,而且刷新时还会闪?
首先,它可以换行,这样就可以知道它不是用TextOut这个API,而是用了DrawText这个API,我
本人也比较喜欢这个API。
其次,它可以设置背景色,可以知道它用了FillRect来填充背景,这是指背景不透明时候。透明
时它是调用SetBKMode来设置透明,此时就不用填充了。
另外,每个Label都可以有不同的字体,颜色等等属性,这样就造就了它的不足。
为什么呢?
正因为上面所说的,它不是真正的控件,所以它所依赖的是所在的父控件,可以是窗体,也可以
是PictureBox。它把这些文字直接绘制到父控件中,所以每次绘制之前,它都要先设置父控件的
字体,字色,背景等等,绘制完毕后还要再还原为原来的属性。所以在移动或者重绘时能明显感
觉到闪烁,如果它没这么多属性也就不会了。
顺便提一下,那个不闪的方法是让系统绘制完毕后再显示,绘制完再显示自然不闪,但是效率嘛
……
********************** 华丽的分割线 **********************
大概说了一下对象,就要说一下在VB中如何创建自己的对象 —— 类 [类模块(Class)]
一个类中最基本的应该算是
Private Sub Class_Initialize()
'构建
End Sub
Private Sub Class_Terminate()
'清除
End Sub
要创建属性可以自己写,也可以用类生成器或者工具->添加过程,其他的跟在窗体中写差不多了,
下次再有空再谈谈事件的触发,毕竟VB是事件驱动嘛!
使用类的方法需要两步,定义+初始化.
dim ** as 类名 '这一步只是定义了类,没有初始化的是不能用的,会显示*** with 什么未设置
之类的
set ** = new 类名 '这一步就初始化了,会触发Class_Initialize事件.
之后使用它,只要像控件一样用就行了,所以有些很复杂但是经常用到的,属于一类的就可以写在
类中,这样就是你的对象了.
********************************************************
|
|