强制和防止窗口重画
下面图老师小编跟大家分享一个简单易学的强制和防止窗口重画教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!
这个API函数以阻止控件重画时(参见“防止一个窗口重画”)。
新建一个项目,添加一个module,然后粘贴下列代码:
PrivateTypeRECT
LeftAsLong
TopAsLong
RightAsLong
BottomAsLong
EndType
PrivateTypePOINTAPI
XAsLong
YAsLong
EndType
PrivateDeclareFunctionGetWindowRectLib"user32"(ByValhWndAsLong,lpRectAsRECT)AsLong
PrivateDeclareFunctionGetClientRectLib"user32"(ByValhWndAsLong,lpRectAsRECT)AsLong
PrivateDeclareFunctionInvalidateRectLib"user32"(ByValhWndAsLong,lpRectAsRECT,ByValbEraseAsLong)AsLong
PrivateDeclareFunctionScreenToClientLib"user32"(ByValhWndAsLong,lpPointAsPOINTAPI)AsLong
PublicSubRepaintWindow(ByRefobjThisAsObject,OptionalByValbClientAreaOnlyAsBoolean=True)
DimtRAsRECT
DimtPAsPOINTAPI
If(bClientAreaOnly)Then
GetClientRectobjThis.hWnd,tR
Else
GetWindowRectobjThis.hWnd,tR
tP.X=tR.Left:tP.Y=tR.Top
ScreenToClientobjThis.hWnd,tP
tR.Left=tP.X:tR.Top=tP.Y
tP.X=tR.Right:tP.Y=tR.Bottom
ScreenToClientobjThis.hWnd,tP
tR.Right=tP.X:tR.Bottom=tP.Y
EndIf
InvalidateRectobjThis.hWnd,tR,1
EndSub
为了试试重画,在窗体上添加一个ListBox和一个Command。把ListBox拉得大一些,这样效果比较明显。再加入下列代码:
PrivateSubCommand1_Click()
RepaintWindowList1
EndSub
PrivateSubForm_Load()
DimiAsLong
Fori=1To200
List1.AddItem"TestItem"&i
Nexti
EndSub
当你单击Command按钮,ListBox的客户区将全部重画。对于ListBox,这种效果并不十分明显地显示,但这段代码放在这里主要目的,是让你在
遇上有东西不能恰当地重画它自己时可以有办法解决。
——————————————————————————————————————————————
防止窗口重画 WXJ_Lake编译
这则代码演示了如何防止窗口的一部分重画。当你要往ListBox或ListView这样的控件里添加许多项时,暂缓重画可以相当地提高处理速度。
在我的系统上,往一个ListBox中加10000项比原来提速30
新建一个项目,添加一个ListBox、一个Command和一个CheckBox。把CheckBox的Caption设为"&LockUpdate",Command的Caption设为"&Load"。
然后,把下列代码粘贴到窗体中:
PrivateDeclareFunctionLockWindowUpdateLib"user32"(ByValhwndLockAsLong)AsLong
PrivateDeclareFunctiontimeGetTimeLib"winmm.dll"()AsLong
PrivateSubCommand1_Click()
DimiAsLong
DimlTImeAsLong
lTIme=timeGetTime()
If(Check1.Value=Checked)Then
LockWindowUpdateList1.hWnd
EndIf
List1.Clear
Fori=1To10000
List1.AddItem"Test"&i
Nexti
If(Check1.Value=Checked)Then
LockWindowUpdate0
List1.Refresh
EndIf
MsgBox"Time:"&timeGetTime-lTIme
EndSub
当你单击Command按钮,代码将往ListBox中添加10000项。如果"LockUpdate"的复选框被选中,Windows将在往ListBox中添加项时防止它的重画。操作结束后,会弹出一个对话框报告运行时间。->