计算机二级VB辅导:VB图像特殊技巧
来源:优易学  2011-12-10 19:50:59   【优易学:中国教育考试门户网】   资料下载   IT书店
 为了美化显示屏幕,增加画面的动感,常常要用到各种图像显示特技,图像的切换技术能明显美化画面。用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

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训