可用一个计数器,每刷新n项才重画一次ListView控件。 闪烁感就n确定。Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypePrivate Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long Private Declare Function ValidateRect 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
不用你算啊,不是有个GetClientRect吗?很少代码的,如下: Private mrcClient As RECT... Call GetClientRect(ListView1.hwnd, mrcClient) ... For ii = 1 To 项数 If ii> 100 Call ValidateRect(ListView1.hwnd, mrcClient)//加入100条后停止重画 End if Next ii
更正: Private mrcClient As RECT... Call GetClientRect(ListView1.hwnd, mrcClient) ... For ii = 1 To 项数 ......//这里向ListView1添加数据 If ii> 100 Call ValidateRect(ListView1.hwnd, mrcClient)//加入100条后停止重画 End if Next ii
....更新项目
LockWindowUpdate 0但250ms的间隔,闪烁是不可避免的,只能用此法减轻闪烁
闪烁感就n确定。Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
Private Declare Function ValidateRect 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 mrcClient As RECT...
Call GetClientRect(ListView1.hwnd, mrcClient)
... For ii = 1 To 项数
If ii> 100
Call ValidateRect(ListView1.hwnd, mrcClient)//加入100条后停止重画
End if
Next ii
Call InvalidateRect(ListView1.hwnd, mrcClient, True)//控件有事件到可重画
Private mrcClient As RECT...
Call GetClientRect(ListView1.hwnd, mrcClient)
... For ii = 1 To 项数 ......//这里向ListView1添加数据 If ii> 100
Call ValidateRect(ListView1.hwnd, mrcClient)//加入100条后停止重画
End if
Next ii
Call InvalidateRect(ListView1.hwnd, mrcClient, True)//控件有事件到可重画