强制和防止窗口重画

_乐呵乐呵得啦

_乐呵乐呵得啦

2016-02-19 18:28

下面图老师小编跟大家分享一个简单易学的强制和防止窗口重画教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!
这个例子告诉你如何强制窗口的一部分重画。有时这是必须的,特别是当你试验自己重画控件的技术,或者已经使用了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中添加项时防止它的重画。操作结束后,会弹出一个对话框报告运行时间。->

展开更多 50%)
分享

猜你喜欢

强制和防止窗口重画

编程语言 网络编程
强制和防止窗口重画

VC防止窗口和控件闪烁的方法

编程语言 网络编程
VC防止窗口和控件闪烁的方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

IE怎么防止弹出窗口?

浏览器
IE怎么防止弹出窗口?

窗口重排便于Excel2018数据的浏览

excel
窗口重排便于Excel2018数据的浏览

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

窗口重排便于Excel2010数据的浏览

电脑入门
窗口重排便于Excel2010数据的浏览

窗口重排在Excel2018工作表中的应用

excel
窗口重排在Excel2018工作表中的应用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win7快速搜索应用

Win7快速搜索应用

Ajax框架 Prototype 1.6.1 发布

Ajax框架 Prototype 1.6.1 发布
下拉加载更多内容 ↓