欢迎光临
我们一直在努力

强制和防止窗口重画_visualbasic教程

建站超值云服务器,限时71元/月

这个例子告诉你如何强制窗口的一部分重画。有时这是必须的,特别是当你试验自己重画控件的技术,或者已经使用了LockWindowUpdate
这个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中添加项时防止它的重画。操作结束后,会弹出一个对话框报告运行时间。->

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 强制和防止窗口重画_visualbasic教程
分享到: 更多 (0)