请问前辈 在这基础上加个功能!

请教前辈 在这基础上加个功能!!有哪位大师帮下忙,帮改下代码。或给个类似的例子参考参考。这代码是用透明贴

请教前辈 在这基础上加个功能!!
有哪位大师帮下忙,帮改下代码。或给个类似的例子参考参考。
这代码是用透明贴图实现蝴蝶在可变的背景里循环飞行,背景框用picturebox。
我想在循环飞行的同时加多一个能控制蝴蝶飞远飞近的功能功能(类似图像缩放产生远近的效果),最好用上下键控制。


'“动画_透明处理”的窗体模块
Option Explicit
Dim ImageNo As Integer '当前的位图编号
Dim IsPlaying0 As Boolean '动画是否启动
Dim lngP As Long
Dim lngR As Long
Private Sub Form_Load()
ImageNo = 1 '动画从book1.bmp开始
IsPlaying0 = False '开始时,动画未启动
'鼠标移到书上时,将出现“开始”提示
  Timer1.Interval = 400
  picFly.ScaleMode = 3 '象素
  picFly.Picture = LoadPicture(App.Path & "\原野.bmp")
  picSour1.AutoRedraw = True: picMask1.AutoRedraw = True
  picSour2.AutoRedraw = True: picMask2.AutoRedraw = True
  picSour1.Picture = LoadPicture(App.Path & "\Bfly1_Sour.bmp")
  picMask1.Picture = LoadPicture(App.Path & "\Bfly1_Mask.bmp")
  picSour2.Picture = LoadPicture(App.Path & "\Bfly2_Sour.bmp")
  picMask2.Picture = LoadPicture(App.Path & "\Bfly2_Mask.bmp")
'播放声音
'SND_ASYNC:异步演播,在播放声音时可以作其他的事
'SND_LOOP:循环演播,播完后再重播。需与SND_ASYNC组合使用
  sndPlaySound App.Path & "\wav300.wav", SND_ASYNC Or SND_LOOP
End Sub
'半秒钟系统自动引发Timer事件
Private Sub Timer1_Timer()
'声明计数器intC为整型的静态变量
  Static intC As Integer
'lngX和lngY表示在原野上飞舞的蝴蝶的位置
  Static lngX As Long
  Static lngY As Long
'intC的初值为0
  intC = intC + 1
'intC只有1和2两种取值
  If intC = 3 Then intC = 1
'intC=1显示张开的蝴蝶
'intC=2显示闭和的蝴蝶
  lngX = lngX + 8 '10是X方向的增量,以象素为单位
  lngY = lngY + 5 '5是Y方向的增量,以象素为单位
  If lngX > (picFly.Width - 40) Then
  lngX = 0
  lngY = 0
  End If
  If intC = 1 Then
  picFly.Cls '清除蝴蝶飞舞所在的图片框
'对张开蝴蝶的透明处理
  lngP = BitBlt(picFly.hDC, lngX, lngY, _
  picMask1.Width, picMask1.Height, picMask1.hDC, 0, 0, SRCAND)
  lngP = BitBlt(picFly.hDC, lngX, lngY, _
  picSour1.Width, picSour1.Height, picSour1.hDC, 0, 0, SRCINVERT)
  Else
  picFly.Cls '清除蝴蝶飞舞所在的图片框
'对闭合蝴蝶的透明处理
  lngP = BitBlt(picFly.hDC, lngX, lngY, _
  picMask2.Width, picMask2.Height, picMask2.hDC, 0, 0, SRCAND)
  lngP = BitBlt(picFly.hDC, lngX, lngY, _
  picSour2.Width, picSour2.Height, picSour2.hDC, 0, 0, SRCINVERT)
  End If
End Sub
Private Sub Timer2_Timer()
ImageNo = ImageNo + 1 '动画下一帧
If ImageNo > 4 Then '如果动画已到最后一帧,则
  ImageNo = 1 '再从第一帧开始
End If
'在Image对象中显示动画的当前帧
picFly.Picture = LoadPicture(App.Path & "\head\head" & ImageNo & ".bmp")
End Sub


[解决办法]
背景框picturebox可以透明处理(仅供参考):http://topic.csdn.net/u/20091110/13/8ce6f8c1-cc47-4247-be7a-e35823a6681a.html?seed=62847887&r=61070709#r_61070709
[解决办法]
任选一种颜色作为 KeyColor 。
每一帧 蝴蝶 图片上需要透明的地方用这个颜色来填充。
把画蝴蝶的窗体背景色也设置成这种颜色。

选颜色很容易吧,共有 16777216 种颜色可选,你的蝴蝶不可能把这所有颜色都用完吧!

窗体设置 KeyColor透明 用到的 API :

GetWindowLong()
SetWindowLong()
SetLayeredWindowAttributes()

先更改蝴蝶窗口的 GWL_EXSTYLE 属性:在原属性上增加 &H80000 属性
然后用:
SetLayeredWindowAttributes hWnd, KeyColor, 0, 1
设置蝴蝶窗口的透明色。

有在 Picture 上画的代码,在窗体上画也是一回事。
只在把蝴蝶窗体置于背景窗体前就行了。