用VB實現“ICQ”式的啟動歡迎畫面
發表于:2007-07-14來源:作者:點擊數:
標簽:
第一次運行,或通過運行程序的方式來啟動I CQ 時,隨著一聲火車的長鳴,我們都能看到一朵背景為透空的大花,這就是ICQ獨特的歡迎畫面!通常,我們都是用一整個帶圖形及文字的窗體來做為歡迎畫面的。我們要如何去做才能實現類ICQ的歡迎畫面呢?這看起來像是件
第一次運行,或通過運行程序的方式來啟動I
CQ時,隨著一聲火車的長鳴,我們都能看到一朵背景為透空的大花,這就是ICQ獨特的歡迎畫面!通常,我們都是用一整個帶圖形及文字的窗體來做為歡迎畫面的。我們要如何去做才能實現類ICQ的歡迎畫面呢?這看起來像是件十分復雜的工作,其實,利用了強大的API函數,事情就會變得非常的簡單。出于簡單化的考慮,我使用
VB6.0簡體中文企業版來完成這一例程。
首先要準備好做為歡迎畫面所需要的圖片,然后對圖片進行簡單的處理,把需要透空的地方填上純白色(255,255,255),然后保存為*.bmp文件,這用PhotoShop可以很容易地實現。需要注意的是,圖片必須為“索引色”模式,如果不是就需用PhotoShop來修改,否則不能實現透空效果?! ∠冉⒁粋€標準EXE工程,在窗體上文稿放置一個Picture控件,控件名為Picture1,和一個Timer控件,控件名為Timer1,Interval屬性設置為2000。
原程序如下:
Option Explicit
`定義獲取桌面HDC的api函數
Private Declare Function GetDC Lib “user32” (ByVal hwnd As Long) As Long
`定義TransparentBlt函數
`實現圖片的透空效果需要用上API函數:TransparentBlt,這個函數功能十分強大,而且使用方便,但不幸的
`是VB自帶的API瀏覽器居然把它的漏掉了,所以我們只有采用人工輸入的方法了
Private Declare Function TransparentBlt Lib “msimg32.dll”_
(ByVal hdcDest As Long, _
ByVal nXOriginDest As Long, _
ByVal nYOriginDest As Long, _
ByVal nWidthDest As Long, _
ByVal nHeightDest As Long, _
ByVal hdcSrc As Long, _
ByVal nXOriginSrc As Long, _
ByVal nYOriginSrc As Long, _
ByVal nWidthSrc As Long, _
ByVal nHeightSrc As Long, _
ByVal crTransparent As Long) As Long
`其中,hdcDest為目標地的HDC,nXOriginDEst和nYoriginDest分別為目標圖像的起始點坐標,nWidthDesk和nHeightDest分別為目標圖像的寬度和高度。與之相應的hdcSrc、nXOriginSrc、nyOriginSrc、nWidthSrc、nHeightSrc分別為原圖的HDC、原圖的起始X、Y坐標、原圖和寬度和長度,crTransparent為需要設置成透空的顏色的RGB值。
`定義用于恢復桌面的函數
Private Declare Function InvalidateRectAsAny Lib “user32” Alias
“InvalidateRect”_ (ByVal hwnd As Long, lpRect As Any, ByVal bErase As Long) As Long
Private Sub Form_Load()
Me.Hide
Dim Pic As Long
Dim w As Long
Dim h As Long
Dim x As Long
Dim sx, sy
Picture1.AutoRedraw = True
`獲取桌面的HDC
x = GetDC(0)
`計算桌面的寬度和高度
sx = Screen.Width \ Screen.TwipsPerPixelX
sy = Screen.Height \ Screen.TwipsPerPixelY
`計算圖像的寬度和高度
w = Picture1.ScaleX(Picture1.Picture.Width, 8,
vbPixels)
h = Picture1.ScaleY(Picture1.Picture.Height, 8, vbPixels)
picture1.picture=loadpicture(“圖像文件的完整文件名稱”)
`使透空的圖像顯示在桌面的中央
Pic = TransparentBlt(x, _
sx / 2 - w / 2, _
sy / 2 - h / 2, _
w, _
h, _
Picture1.hDC, _
0, _
0, _
w, _
h, _
RGB(255, 255, 255))
End Sub
Private Sub Timer1_Timer()
`兩秒鐘后恢復桌面
InvalidateRectAsAny 0, ByVal 0&, True
Load 自制程序的主窗體名
Timer1.Enabled = False
End Sub
需要注意的是程序完成后如果直接在VB環境下運行有可能會出現透空圖像一閃而過的現象,這并不是你的錯,只要把程序編譯成*.exe的文件后運行一切都會正常的。
原文轉自:http://www.anti-gravitydesign.com