• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Netants “任務完成”式窗體的實現

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 10次 | 進入軟件測試論壇討論

    領測軟件測試網 四川 虞東海

        Netants是國人洪以容先生開發的一款用來實現多線程下載文件的工具,它支持斷點續傳、拖放下載等功能,深受國人喜愛,實屬一款國產軟件精品。不過我們今天在這里所要講述的不是它實現多線程下載的原理,而是其中的一個“任務完成”窗體的實現。
    不知道有沒有細心的讀者發現在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.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>