Netants “任務完成”式窗體的實現
發表于:2007-07-14來源:作者:點擊數:
標簽:
四川 虞東海 Net ant s是國人洪以容先生 開發 的一款用來實現多線程下載文件的工具,它支持斷點續傳、拖放下載等功能,深受國人喜愛,實屬一款國產軟件精品。不過我們今天在這里所要講述的不是它實現多線程下載的原理,而是其中的一個“任務完成”窗體的實現
四川 虞東海
Net
ants是國人洪以容先生
開發的一款用來實現多線程
下載文件的工具,它支持斷點續傳、拖放下載等功能,深受國人喜愛,實屬一款國產軟件精品。不過我們今天在這里所要講述的不是它實現多線程下載的原理,而是其中的一個“任務完成”窗體的實現。
不知道有沒有細心的讀者發現在Netants的最新版本中,隨著下載完成時那一聲清脆的“Job finished!”彈出的“任務完成"窗口不再像以前一樣倏地一下就彈出了,而是漸漸的由小變大地彈出。那么這是怎樣實現的呢?
實現原理:
其實實現這個的原理很簡單。我們可以在窗口顯示之前,在顯示的背景上利用Rectangle函數畫出一系列由小到大的矩形,當最大矩形的大小是窗口的大小時,再顯示窗口。這時只要畫出矩形的時間間隔滿足上面的條件,完全可以使窗口在視覺上達到由小到大地彈出。
編程實例:
新建一工程,為了突出效果,我們在工程中添加兩個窗體Form1、Form2,其中Form1就是啟動時的窗體,在Form1中添加一CommandButton及一Timer控件。我們要實現在點擊Command1后,Form2將于5秒后由小到大彈出。
在Form1中添加以下代碼:
Private Sub Command1_Click()
Timer1.Enabled = True 注釋:注意在設計時將Timer1.Enabled設為False;Timer1.Interval=100
End Sub
Private Sub Timer1_Timer()
Static a
a=a+1
If a=50 Then
Form2.Show
End If
End Sub
在Form2中添加以下代碼:
首先添加RECT類型的定義以及GetWindowRect、Rectangle、SetWindowPos、DeleteDC、GetDC幾個API函數。
注釋:以下聲明用來實現使窗口總在最前,為便于使用,特將其加至窗體屬性中
Private Property Let OnTop(Setting As Boolean)
If Setting Then
SetWindowPos hwnd, -1, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
Else
SetWindowPos hwnd, -2, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End If
mbOnTop = Setting
End Property
Private Property Get OnTop() As Boolean
OnTop = mbOnTop
End Property
注釋:以上為窗體通用部分,以下為窗體代碼
Private Sub Form_Load()
Dim Size As RECT
GetWindowRect Me.hwnd,Size
Dim FormWidth, FormHeight As Integer 注釋:定義窗體的寬度和高度
FormWidth=(Size.Right-Size.Left)
FormHeight=(Size.Bottom-Size.Top)
Dim TempDC
TempDC=GetDC(ByVal 0&) 注釋:獲取整個屏幕的DC
Dim increment As Integer
increment=1000 注釋:通過調節此數可以調節畫出矩形的時間間隔,其值越大,時間間隔越長,其值越小,時間間隔越短
Dim Count,LeftPoint,TopPoint,nWidth,nHeight As Integer
For Count=1 To increment
nWidth=FormWidth*(Count/increment)
nHeight=FormHeight*(Count/increment)
LeftPoint=Size.Left+(FormWidth-nWidth)/2
TopPoint=Size.Top+(FormHeight-nHeight)/2
Rectangle TempDC,LeftPoint,TopPoint,LeftPoint+nWidth,TopPoint+nHeight 注釋:畫矩形
Next Count
DeleteDC (TempDC) 注釋:釋放設備DC
OnTop=True 注釋:使窗口總在最前
End Sub
大功告成,要說明的一點是這種特效并不適合于非常大的窗體,因為如果窗體過大的話,我們就會發現在窗體顯示之前,其背景為一白色的慢慢變大的矩形,這樣就容易露餡了。個人覺得窗體的大小為屏幕大小的九分之一時最為合適,而此時increment的值為1000時效果最佳。
以上程序在
Windows98SE中文版、Visual Basic6.0中文企業版下運行通過。
原文轉自:http://www.anti-gravitydesign.com