第一次運行,或通過運行程序的方式來啟動ICQ時,隨著一聲火車的長鳴,我們都能看到一朵背景為透空的大花,這就是ICQ獨特的歡迎畫面!通常,我們都是用一整個帶圖形及文字的窗體來做為歡迎畫面的。我們要如何去做才能實現類ICQ的歡迎畫面呢?這看起來像是件十分復雜的工作,其實,利用了強大的API函數,事情就會變得非常的簡單。出於簡單化的考慮,我使用VB6.0簡體中文企業版來完成這一例程。
首先要准備好做為歡迎畫面所需要的圖片,然後對圖片進行簡單的處理,把需要透空的地方填上純白色(255,255,255),然後保存為*.bmp文件,這用PhotoShop可以很容易地實現。需要注意的是,圖片必須為“索引色”模式,如果不是就需用PhotoShop來修改,否則不能實現透空效果。 先建立一個標准EXE工程,在窗體上文稿放置一個Picture控件,控件名為Picture1,和一個Timer控件,控件名為Timer1,Interval屬性設置為2000。
原程序如下:
OptionExplicit
`定義獲取桌面HDC的api函數
PrivateDeclareFunctionGetDCLib“user32”(ByValhwndAsLong)AsLong
`定義TransparentBlt函數
`實現圖片的透空效果需要用上API函數:TransparentBlt,這個函數功能十分強大,而且使用方便,但不幸的
`是VB自帶的API浏覽器居然把它的漏掉了,所以我們只有采用人工輸入的方法了
PrivateDeclareFunctionTransparentBltLib“msimg32.dll”_
(ByValhdcDestAsLong,_
ByValnXOriginDestAsLong,_
ByValnYOriginDestAsLong,_
ByValnWidthDestAsLong,_
ByValnHeightDestAsLong,_
ByValhdcSrcAsLong,_
ByValnXOriginSrcAsLong,_
ByValnYOriginSrcAsLong,_
ByValnWidthSrcAsLong,_
ByValnHeightSrcAsLong,_
ByValcrTransparentAsLong)AsLong
`其中,hdcDest為目標地的HDC,nXOriginDEst和nYoriginDest分別為目標圖像的起始點坐標,nWidthDesk和nHeightDest分別為目標圖像的寬度和高度。與之相應的hdcSrc、nXOriginSrc、nyOriginSrc、nWidthSrc、nHeightSrc分別為原圖的HDC、原圖的起始X、Y坐標、原圖和寬度和長度,crTransparent為需要設置成透空的顏色的RGB值。
`定義用於恢復桌面的函數
PrivateDeclareFunctionInvalidateRectAsAnyLib“user32”Alias
“InvalidateRect”_(ByValhwndAsLong,lpRectAsAny,ByValbEraseAsLong)AsLong
PrivateSubForm_Load()
Me.Hide
DimPicAsLong
DimwAsLong
DimhAsLong
DimxAsLong
Dimsx,sy
Picture1.AutoRedraw=True
`獲取桌面的HDC
x=GetDC(0)
`計算桌面的寬度和高度
sx=Screen.WidthScreen.TwipsPerPixelX
sy=Screen.HeightScreen.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))
EndSub
PrivateSubTimer1_Timer()
`兩秒鐘後恢復桌面
InvalidateRectAsAny0,ByVal0&,True
Load自制程序的主窗體名
Timer1.Enabled=False
EndSub
需要注意的是程序完成後如果直接在VB環境下運行有可能會出現透空圖像一閃而過的現象,這並不是你的錯,只要把程序編譯成*.exe的文件後運行一切都會正常的。->