在多媒体程序设计中,为了美化显示屏幕,增加画面的动感,常常要用天各种图像显示特技。图像的切换技术能明显美化画面。用Visual Basic编制这类程序时,由于VB自身没有这种切换功能,因此需要利用第三方控件或调用WindowsAPI函数BitBlt来实现这种功能。本文介绍用BitBlt函数实现画面的各种切换方法,供大家参考。 假设有5个图像文件(Picture1-Picture5),我们的目标是让这5幅画自动地循环显示,每幅画以某种切换方式出现,当有击鼠标动作时退出程序。 1 创建项目文件: 运行VB,建立一个新工程文件Project1,加入一个新的Form名称为Form1,和一个模块文件Modull,在Form1中加入一个图画框Picture1和一个定时器Timer1。 设置各控件的属性如下: Form1:AutoRedraw:True ScaleMode:3 Picture1:AutoRedraw:True ScaleMode:3 Visible:False 2 代码编写 Modull.bas中的内容(声明BitBlt函数): 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文件中粘贴即可。 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 () End &当有击鼠标动作时程序结束 End Sub
切换演示工作主要在定时器中完成: Private Sub Timer1-Timer () hDestDC=Form1.HDC&目标DC hSrcDC=Picture1.hDC&源DC,画是从不可见的Picture1中拷贝到窗体 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 50, 0) Picture1.Cls Do m = Rnd * Picture1.ScaleWidth n = Rnd * Picture1.ScaleHeight - 500 For i = 0 To Rnd * 800 Picture1.Line (m, n + 2.5 * i)-(m + i / 2, n + 2 * i), RGB(180, 180, 180) Picture1.Line (m, n + 2.5 * i)-(m - i / 2, n + 2 * i), RGB(80, 80, 80) Next i DoEvents Loop End Sub ′结束程序 Private Sub Command3-Click() End End Sub <  
1/2 1 2 下一页 尾页 |