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

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

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

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

    強制和防止窗口重畫

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

    領測軟件測試網   這個例子告訴你如何強制窗口的一部分重畫。有時這是必須的,特別是當你試驗自己重畫控件的技術,或者已經使用了LockWindowUpdate
    這個API函數以阻止控件重畫時(參見“防止一個窗口重畫”)。

      新建一個項目,添加一個module,然后粘貼下列代碼:

    Private Type RECT
      Left As Long
      Top As Long
      Right As Long
      Bottom As Long
    End Type

    Private Type POINTAPI
      X As Long
      Y As Long
    End Type

    Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
    Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
    Private Declare Function InvalidateRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
    Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long

    Public Sub RepaintWindow(ByRef objThis As Object, Optional ByVal bClientAreaOnly As Boolean = True)
     Dim tR As RECT
     Dim tP As POINTAPI
     If (bClientAreaOnly) Then
       GetClientRect objThis.hWnd, tR
     Else
       GetWindowRect objThis.hWnd, tR
       tP.X = tR.Left: tP.Y = tR.Top
       ScreenToClient objThis.hWnd, tP
       tR.Left = tP.X: tR.Top = tP.Y
       tP.X = tR.Right: tP.Y = tR.Bottom
       ScreenToClient objThis.hWnd, tP
       tR.Right = tP.X: tR.Bottom = tP.Y
     End If
     InvalidateRect objThis.hWnd, tR, 1 
    End Sub
        
      為了試試重畫,在窗體上添加一個ListBox和一個Command。把ListBox拉得大一些,這樣效果比較明顯。再加入下列代碼:

    Private Sub Command1_Click()
     RepaintWindow List1
    End Sub

    Private Sub Form_Load()
     Dim i As Long
     For i = 1 To 200
       List1.AddItem "TestItem " & i
     Next i
    End Sub

      當你單擊Command按鈕,ListBox的客戶區將全部重畫。對于ListBox,這種效果并不十分明顯地顯示,但這段代碼放在這里主要目的,是讓你在
    遇上有東西不能恰當地重畫它自己時可以有辦法解決。

    ——————————————————————————————————————————————

    防止窗口重畫  WXJ_Lake 編譯

      這則代碼演示了如何防止窗口的一部分重畫。當你要往ListBox或ListView這樣的控件里添加許多項時,暫緩重畫可以相當地提高處理速度。
    在我的系統上,往一個ListBox中加10000項比原來提速30%

      新建一個項目,添加一個ListBox、一個Command和一個CheckBox。把CheckBox的Caption設為"&Lock Update",Command的Caption設為"&Load"。
    然后,把下列代碼粘貼到窗體中:

    Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
    Private Declare Function timeGetTime Lib "winmm.dll" () As Long

    Private Sub Command1_Click()
     Dim i As Long
     Dim lTIme As Long

     lTIme = timeGetTime()
      
     If (Check1.Value = Checked) Then
       LockWindowUpdate List1.hWnd
     End If
      
     List1.Clear
     For i = 1 To 10000
       List1.AddItem "Test " & i
     Next i
      
     If (Check1.Value = Checked) Then
       LockWindowUpdate 0
       List1.Refresh
     End If
      
     MsgBox "Time: " & timeGetTime - lTIme
      
    End Sub

      當你單擊Command按鈕,代碼將往ListBox中添加10000項。如果"Lock Update"的復選框被選中,Windows將在往ListBox中添加項時防止它的重畫。操作結束后,會彈出一個對話框報告運行時間。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


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