用VB實現“ICQ”式的啟動歡迎畫面

發表于:2007-07-14來源:作者:點擊數: 標簽:
第一次運行,或通過運行程序的方式來啟動I CQ 時,隨著一聲火車的長鳴,我們都能看到一朵背景為透空的大花,這就是ICQ獨特的歡迎畫面!通常,我們都是用一整個帶圖形及文字的窗體來做為歡迎畫面的。我們要如何去做才能實現類ICQ的歡迎畫面呢?這看起來像是件
    第一次運行,或通過運行程序的方式來啟動ICQ時,隨著一聲火車的長鳴,我們都能看到一朵背景為透空的大花,這就是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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97