利用VB5.0和WINDOWS95自身所帶的“畫筆”就可以制作出帶有動(dòng)畫和聲音的屏幕保護(hù)程序。畫面是一只蝴蝶在音樂的伴奏下飛動(dòng),碰動(dòng)屏幕的邊緣就會(huì)向小球反彈一樣換個(gè)方向飛。這里需要兩個(gè)bmp文件,采用的是VB自帶的文件(源文件的位置是c:\program files\devstduio\vb\samples\pguide\vcr\bfly1.bmp和bfly2.bmp)。因?yàn)楹蚋鱾€(gè)方向飛,所以還要在這兩個(gè)文件的基礎(chǔ)上,再制作兩個(gè)。打開WINDOWS附件中的“畫筆”,打開bfly1.bmp,點(diǎn)取“畫像”菜單中的“翻轉(zhuǎn)/旋轉(zhuǎn)”,選擇“水平翻轉(zhuǎn)”后,將生成的新文件另存存盤,起名“左飛”,同樣的方法將bfly2.bmp另存為“左合”,將bfly1.bmp改名為“右飛”,bfly2.bmp改名為“右合”(左飛,左合是蝴蝶向左飛時(shí)的畫面,右飛,右合是蝴蝶向右飛時(shí)的畫面,最后在畫筆中將4個(gè)圖的底色都改為黑色,這是保證蝴蝶的底色和屏幕的背景相融合)。
動(dòng)畫的制作是利用image控件來(lái)實(shí)現(xiàn)的。改變image的picture屬性可實(shí)現(xiàn)畫面的變化,利用move命令可實(shí)現(xiàn)畫面的移動(dòng)。利用MCI控件來(lái)實(shí)現(xiàn)音樂播放。程序編譯后將生成的exe可執(zhí)行文件,改為以*.scr結(jié)尾的文件名,將其復(fù)制到windows\system子目錄即可,然后就可以在“控制面板”的“顯示器”中選擇該屏幕保護(hù)程序即可使用(運(yùn)行所帶exe文件必須將mid復(fù)制到指定的位置。這里建議使用所帶的setup進(jìn)行自動(dòng)安裝,可以省去一切步驟,setup后的文件名為蝴蝶.scr,已自動(dòng)安裝到系統(tǒng)的文件夾,在“顯示器”中的“屏幕保護(hù)程序”可以找到。重新編譯程序所需的4個(gè)bmp文件和一個(gè)Mid文件也安裝到指定的位置。詳細(xì)路徑請(qǐng)見源程序中的說明)。
具體做法如下:
首先建立一個(gè)新窗體form1,各屬性分別是backcolor選為黑色,borderstyle選為0(黑
色不帶邊框)。在form1上加入7個(gè)image控件,在格式菜單中將各個(gè)image的大小都選為相同,image1-7的stretch屬性都選為true(圖像將隨控件的大小而變化),image1-6的visible的屬性選為false(不可見),
image7的visible屬性為true。
Image1.picture=右飛 Image2.picture =右合
Image3.picture=左飛 Image4.picture =左合
在“工程”菜單中選擇“部件”,并從“部件”對(duì)話框的“控件”列表中選擇“Microsoft Multimedia Control5.0”加入MCI控件,并將其visible屬性改為false。加入時(shí)鐘控件timer1,其interval屬性為200(interval的值與機(jī)器的配置有關(guān),在其他機(jī)器上可作適當(dāng)調(diào)整,我的配置是P133,內(nèi)存為32M)。
原理如下:image1-4用來(lái)存圖形,運(yùn)行時(shí)不可見。Image5用來(lái)存蝴蝶翅膀張開時(shí)的圖像,Image6用來(lái)存蝴蝶翅膀合上時(shí)的圖像,運(yùn)行時(shí)都不可見。Image7是唯一運(yùn)行時(shí)可見,利用時(shí)鐘控件來(lái)改變其圖形,用Image5和Image6來(lái)回變換。
If Image7.Picture = Image5.Picture Then
Image7.Picture = Image6.Picture
Else
Image7.Picture = Image5.Picture
End If
蝴蝶的移動(dòng)利用image7控件的move方法:
image7.move xp,yp
4個(gè)邊界值
上邊:y=0
下邊:y=form1.scaleheight-image7.scaleheight
左邊:x=0
右邊:x= form1.scalewidth-image7.scalewidth
xp,yp為水平和垂直的移動(dòng)量。
X,y為image7在窗體中的位置
左右邊界的判斷:
If x>=form1.ScaleWidth-Image1.Width Then '右邊界
Image5.Picture = Image3.Picture
'蝴蝶應(yīng)向左飛,翅膀張開的圖形應(yīng)選為左飛
Image6.Picture = Image4.Picture
'翅膀合上的圖形應(yīng)選為左合
x = Form1.ScaleHeight - Image1.Width
'改變 x 的位置
xp = (-1) * xp
'改變水平的移動(dòng)量符號(hào),以便向相反方向飛。
End If
If x <= 0 Then '左邊界
Image5.Picture = Image1.Picture '右飛
Image6. Picture = Image2. Picture '右合
x = 0
xp = (-1) * xp
End If
If y > = Form1.ScaleHeight - Image1. Height Then
'下邊界
y = Form1. ScaleHeight - Image1. Height
'改變y的位置
yp = (-l) * yp
'改變垂直的移動(dòng)量符號(hào),以便向相反方向飛
End If
If y <= 0 Then '上邊界
y = 0
yp = (-1) * yp
End If
聲音的播出:這里為播放mid文件
MMControl1. DeviceType =""
MMControl1. Filename = "c:\mid\eine.mid" (eine.mid 為一 mid 文件)
MMControl1. Command = "open"
MMControl1. Command = "play"
這還需利用API函數(shù)實(shí)現(xiàn)鼠標(biāo)的隱藏與出現(xiàn),這里就不一一介紹了。
部分程序代碼如下(詳細(xì)代碼及解釋請(qǐng)見源文件):
Dim x As Integer
Dim y As Integer
Dim xp As Integer
Dim yp As Integer
Dim lastx, lasty
private Sub Form1_KeyDown(KeyCode As integer, Shift As Integer)
Endscrnsave '結(jié)束屏幕保護(hù)程序
End Sub
Private Sub Form1_Load()
Move 0, 0,Screen. Width,Screen. Height '讓form1全屏顯示
hidemouse '隱藏鼠標(biāo)
x = l000 '蝴蝶的開始位置
y = l000
xp = 80 '移動(dòng)量
yp = 80
Image5. Picture = Imagel. Picture
'確定翅膀張開的圖形是“右飛”,蝴蝶向右飛
Image6. Picture = Image2. Picture
'確定翅膀合上的圖形是“右合”
Image7. Picture = Image1. Picture
MMControl1. Command = "close" '確保MCI控件已關(guān)閉
MMControl1. DeviceType =""
'啟動(dòng)程序就播放mid 聲音文件
MMControl1.filename = "c:\mid\eine.mid"
MMControl1.Command = "open"
MMControl1.Command = "play"
End Sub
Private Sub Form1_MouseMove(Button As integer, Shift As Integer, x As Single, y As Single )
If IsEmpty (lastx) Or IsEmpty (lasty) Then
lastx = x
lasty = y
End If
If Abs(lastx - x) > 2 Or Abs(lasty - y) > 2 Then
endscrnsave
End If
lastx = x
lasty = y
End Sub
Private Sub Form1_Unload (Cancel As integer)
MMControl1. Command = "close"
Unload Me
End Sub
Private Sub Timer1_Timer()
'判斷mid文件是否播放完,如果播放完,進(jìn)行重播
If MMControl1. Poesition = 895 Then
'些mid文件的長(zhǎng)度(mid文件的長(zhǎng)度,可建立一Label控件,在時(shí)鐘控件中令
'Lagel1.caption=mmcontrol1.position,就可動(dòng)態(tài)顯示播放mid
'文件的位置,當(dāng)mid播放完,就可求出此mid文件的長(zhǎng)度。)
MMControl1. Command = "prev"
'回到此mid文件的開始位置
MMControl1. Command = "play" '播放
End If
x = x + xp '增加移動(dòng)量
y = y + yp
If x > = Form1. ScaleWidth - Image1. Width Then
'右邊界判斷
Image5. Picture = Image3. Picture '換圖像
Image6. Picture = Image4. Picture
x = Form1. ScaleHeight - Image1. Width
xp = (-1) * xp '改變移動(dòng)量
End If
If x < =0 Then
Image5.Picture = Image1. Picture
Image6.Picture = Imege2. Picture
x = 0
xp = (-1) * xp
End If
If y > = Form1.ScaleHeight - Image1. Height Then
y = Form1. ScaleHeight - Image1. Height
yp = (-1) * yp
End If
If y <= O Then
y = O
yp = (-1) * yp
End If
If Image7.Picture = Image5. Picture Then
'不斷改變圖象以實(shí)現(xiàn)翅膀的一張一合。
Image7. Picture = Image6. Picture
Else
Image7. Picture = Image5. Picture
End If
Image7. Move x, y '最關(guān)鍵的一步蝴蝶的移動(dòng)
End Sub
模塊中的代碼:
Declare Function ShowCursor Lib "user32" (ByVal bSbow As Long) As Long
sub endscrnsave() '結(jié)束此程序
showmouse
End
End Sub
Sub showmouse()
While ShowCursor(True) < 0
Wend
End Sub
Sub Hidemouse() '隱藏鼠標(biāo)
While ShowCursor(False) > = 0
Wend
End Sub
sub Main()
If App. PrevInstance = True Then
Exit Sub
End If
Form1.Show
End Sub
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。