我也会VB编程 共43页[1 2 3 4 5 6 7 >»<... 最后一页]

用Windows的API函数来实现动画

四、用Windows的API函数来实现动画

如果要在VB中实现高速、复杂的动画,编制的程序可能会很复杂,而程序一复杂,速度却又慢了下来。好在Windows操作系统自己本身已具备了许多解决复杂问题的函数集棗应用程序编程接口(Application Programming Interface,即API),其中有一大部分就是解决图形处理问题的。使用API函数来制作动画既简单又高速,但使用它们的本身却显得有点复杂。这里我们不想对API的使用方法作过多的介绍,只是举一个例子来说明怎样使用API来制作动画。

我们知道在PowerPoint、Authorware等多媒体集成环境中都可以用多种模式来显示某幅图片,如可以从左(右)飞入,由小变大或由大变小,百页窗方式显示,淡入淡出……等等。这种效果在VB中也可以实现,方法多种多样,调用API函数来实现是相当简单的。

程序实例:

在窗体上有四个按钮,当按其中某个按钮时,就产生相应的显示效果。

基本原理:

我们在窗体上放置两个图形框Picture1和Picture2,其中Picture1作为源,Picture2为目标。picture1不可见,Picture2可见。把要显示的图像装入Picture1中,因为Picture1不可见,所以图像也就不显示出来了。如果我们把Picture1中的图像分成若干部分,一点一点地复制到Picture2中,因为Picture2是可见的,所以图像也就一点一点地显示出来了。只要我们改变复制的过程,图像显示的过程也就可以产生不同的方式。在Windows的API函数中,有一个BitBlt函数就是专门干这个传递位图工作的。BitBlt函数的调用格式如下:

BitBlt hDestDC , x , y , nWidth , nHeight , hSrcDC , xSrc , ySrc , dwRop

我们对函数参数作一些简单解释:

hDestDC为目标设备环境(如PictureBox对象);x、y分别为拷贝目标环境的左上角横、纵坐标;nWidth、nHeight分别为拷贝目标环境的宽度和高度。

hSrcDC为源设备环境;xSrc、ySrc分别为拷贝源环境的左上角横、纵坐标。

dwRop为位处理操作,用以决定源位图和目标位图之间进行何种颜色组合,生成目标位图中的最终颜色。下面代码中取的srccopy即为源位图直接覆盖目标位图。

l 在Form1中的控件(如图7):

图7

(1)Command1~Command4:

Caption属性分别为:“飞入效果”、“两边向中间”、“从中间扩散”、“拉伸效果”。

(2)Picture1~Picture2:

同样大小,Picture1的Visible属性=False,Picture属性为某一要显示的图形文件。

(3)Timer1:

Interval=1

Enable=False

l 程序代码:

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, _

ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _

ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, _

ByVal dwRop As Long) As Long

Private Const srccopy = &HCC0020

Dim h As Long, w As Long

Dim i As Long, j As Long

Dim k As Double

Private Sub Command1_Click() '从左端飞入

Picture2.Cls

For i = 0 To w Step 1

BitBlt Picture2.hDC, 0, 0, i, h, Picture1.hDC, w - i, 0, srccopy

For j = 0 To 10000 Step 1 '控制延时时间

Next

Next

End Sub

Private Sub Command2_Click() '从两端向中间

Picture2.Cls

For i = 0 To w / 2 Step 1

BitBlt Picture2.hDC, i, 0, 1, h, Picture1.hDC, i, 0, srccopy

BitBlt Picture2.hDC, w - i, 0, w - i, h, Picture1.hDC, w - i, 0, srccopy

For j = 0 To 10000

Next

Next

End Sub

Private Sub Command3_Click() '从中心扩散

Picture2.Cls

Timer1.Enabled = True

i = w / 2

j = h / 2

End Sub

Private Sub Command4_Click() '从左端拉伸

Picture2.Cls

For k = 0 To 1.01 Step 0.01

For i = w To 0 Step -1

BitBlt Picture2.hDC, i * k, 0, 1, h, Picture1.hDC, i, 0, srccopy

Next

Next

End Sub

Private Sub Form_Load()

h = Picture2.Height

w = Picture2.Width

End Sub

Private Sub Timer1_Timer()

BitBlt Picture2.hDC, i, j, w - 2 * i, h - 2 * j, Picture1.hDC, i, j, srccopy

i = i - w / 150

j = j - h / 150

End Sub

注意:API函数在调用前必须先声明。程序开头处的一大段就是为BitBlt函数作声明的。刚开始学习使用API函数的人往往被这一大串的声明吓退;其实不用怕,这些都不用用户自己输入,在VB的“外接程序”菜单中的“外接程序管理器”可以产生“API浏览器”,而在“API浏览器”中可以显示每个API函数的声明语句,用户只需把它们复制过来就行了。具体操作方法可以参见VB中的有关“帮助”。

还有许多其他的API函数可以用来制作动画,有兴趣的读者可以参阅专门讲API函数如何使用的书籍。

 
我也会VB编程 共43页[1 2 3 4 5 6 7 >»<... 最后一页]