新东方在线 中华会计网校

计算机等级考试二级VB辅导:图像的特殊技巧

计算机等级考试二级VB辅导:图像的特殊技巧

学校:武汉大学新网易计算机学校 时间:2010-5-15 9:54:12

计算机等级考试二级VB辅导:图像的特殊技巧


为了美化显示屏幕,增加画面的动感,常常要用到各种图像显示特技,图像的切换技术能明显美化画面。用VB编制这类程序时,由于VB自身没有这种切换功能,因此需要控件的参与或调用API函数BitBlt来实现这种功能。这里向你展示用BitBlt函数实现画面的各种足以令人兴奋的效果。

假设有5个图像文件——Picture1至Picture5,我们的目标是:让这5幅画自动地循环显示,每幅画以某种切换方式出现,当有击鼠标动作时退出程序。

创建项目文件

建立一个新工程文件Project1,加入一个新的Form名称为Form1;添加一个模块文件Modull;在Form1中加入一个图画框Picture1和一个定时器Timer1。

设置属性如下:

Form1:AutoRedraw:True

ScaleMode:3

Picture1:AutoRedraw:True

ScaleMode:3

Visible:False

编写代码

声明BitBlt函数——Modull.bas中的内容:

Public Const SRCCOPY=&HCC0020′(DWORD)dest=source

Declare Function BitBlt Lib ″gdi32″Alias ″BitBlt″(By Val 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

这两句只要从Win32api.txt文件中粘贴即可(使用API查看器)。

Form1中的代码:

在Declare中定义全局变量:

Const bmpfilemax=5 ′总共5个bmp文件。

Dim bmpfile(bmpfilemax)As String ′bmp文件的文件名数组。

Dim drawbmpmode(bmpfilemax) As Integer ′各画显示时的切换方式。

Dim bmpnum,movestep,xmax,ymax As Integer

Dim kxy As Single ′x,y二个方向的比例。

程序运行时先作初始化工作:

Private Sub Form-Load ()

bmpnum=0 ′当前文件号=0,第一个文件。

bmpfile(0)=App.Path+′′\bmp1.bmp′′

bmpfile(1)=App.Path+′′\bmp2.bmp′′

bmpfile(2)=App.Path+′′\bmp3.bmp′′

bmpfile(3)=App.Path+′′\bmp4.bmp′′

bmpfile(4)=App.Path+′′\bmp5.bmp′′

drawbmpmode(0)=1 drawbmpmode(1)=5

drawbmpmode(2)=3 drawbmpmode(3)=4

drawbmpmode(4)=2 movestep=0

xmax=Form.ScaleWidth/2

ymax=Form.ScaleHeight/2

kxy =ymax/xmax

Picture1.Picture=LoadPicture(bmpfile(bmpnum))

Timer1.Interval=30 ′定时器启动。

End Sub

响应鼠标的代码:

Private Sub Form—Click ()

EndEnd Sub

切换演示工作主要在定时器中完成,代码如下:

Private Sub Timer1-Timer ()

hDestDC=Form1.HDC ′目标DC。

hSrcDC=Picture1.hDC

drawflag =drawbmpmode(bmpnum)

Select Case drawflag

Case 1 ′从中间逐步放大。

endmax=xmax′用于结束判断。

X1=xmax-movestep

w=movestep*2

Y1=Cint(ymax-movestep*kxy)

h=Cint(2*movestep*kxy)

i=BitBlt(hDestDC,X1,Y1,w,h,hSrcDC,X1,Y1,SRCCOPY)

Case 2 ′从左到右。

endmax=xmax

w=movestep*2

h=Form1.ScaleHeight

i=BitBlt(hDestDC,0,0,w,h,hSrcDC,X1,Y1,SRCCOPY)

Case 3 ′左右向中间。

endmax=xmax

w=movestep

h=Form1.ScaleHeight

i=BitBlt(hDestDC,0,0,w,h,hSrcDC,0,0,SRCCOPY)′左面部分。

X1= Form1.ScaleWidth-movestep

i=BitBlt(hDestDC,X1,0,w,h,hSrcDC,X1,0,SRCCOPY) ′左面部分。

Case 4 ′栅条状。

endmax=CInt(2*xmax/10)

tempi=CInt(2*xmax/10)

w=movestep

h=Form1.ScaleHeight

For s=0 To 9

i=BitBlt(hDestDC,tempi*s,0,w,h,hSrcDC,tempi*s,0,SRCCOPY)

Next s

Case 5 ′棱形状。

endmax=CInt(2*xmax/10)

tempi=CInt(2*xmax/10)

w=movestep

For ih=0 To w-1

For ik=0 To 9

For ij=0 To 9

l=tempi*ik+tempi/2

t=tempi*ij+tempi/2

i=BitBlt(hDestDC,1-(w-ih),t-ih,(w-ih)*2,1,hSrcDC,1-(w-ih), t-ih, SRCCOPY)

i=BitBlt(hDestDC,1-(w-ih),t+ih,(w-ih)*2,1,hSrcDC,1-(w-ih), t+ih, SRCCOPY)

Next ij

Next ik

Next ih

End Select

Form1.Refresh

movestep=movestep+2 ′步进增加。

If movestep>endmax Then

bmpnum=bmpnum+1 ′进到下一张画。

If bmpnum>=bmpfilemax Then

bmpnum=0

End If

movestep=0

Picture1.Picture=LoadPicture(bmpfile(bmpnum))

End If End Sub

 

返学费网( www.fanxuefei.com)提醒有培训需求的网友:先在返学费网咨询预约培训需求,再去培训机构报名缴费,开课后可以获得返学费网额外现金回赠

学费网:中国最大的教育培训返现平台
www.fanxuefei.com
鄂ICP备08106010号