强制重画窗口某一区域 |
这个例子演示了如何强制重画窗口某一区域.有时这是很需要的,例如当你使用LockWindowUpdate API 函数来加快某一控件的数据加载速度时. 新建一个工程,添加一个模块,代码如下: 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 在窗体上放置一个按钮和列表框.使列表框足够大以便观察效果.然后添加以下代码: 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 |