强制和防止窗口重画

2016-02-19 18:28 10 1 收藏

下面图老师小编跟大家分享一个简单易学的强制和防止窗口重画教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

【 tulaoshi.com - 编程语言 】

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

来源:http://www.tulaoshi.com/n/20160219/1617773.html

延伸阅读
NoClose一招防止电脑窗口误关   NoClose的原理其实非常简单,就是将原有的单手关闭(点击关闭按钮可视为单手操作)改为双手关闭,通俗来说就是由两只手同时配合才能关闭一个窗口。具体操作很简单,启动软件后自动驻留系统托盘,这时一个对话框将弹出告诉我们具体的使用方法(可惜是英文滴~所以估计不太会有人喜欢)。这其中最关键的是一个...
标签: 上古卷轴5
《上古卷轴5》控制台强制结婚和强制随从代码的真正用法~! 《上古卷轴5》控制台强制结婚和强制随从代码的真正用法~!让家庭主妇们也戎装上阵吧! 网上流传有用控制台强制结婚和强制随从的代码,但实际情况却是有的玩家用起来有效,有的没有效果。 经鄙人亲测后发现这2个代码并不是100%对任何NPC都有效的,而是有苛刻附加条件的,现在详细说明...
防止相机抖动和照片模糊 拍摄清晰照片的秘诀在于握机和拍摄姿势。了解如何握机和正确的拍摄姿势很重要,可消除甚至最轻微的相机抖动。掌握拍摄姿势后,我们会介绍如何调整相机的设置,从而减少模糊,让图像更为清晰锐利。 1、 熟悉相机 多数人用左手持机并用右手按快门和调整其他功能。数码相机的背面有很多按键,但是可能仅...
标签: Web开发
强制不换行 div{ white-space:nowrap; } 自动换行 div{ word-wrap: break-word; word-break: normal; } 强制英文单词断行 div{ word-break:break-all; } CSS设置不转行: overflow:hidden 隐藏 white-space:normal 默认 pre 换行和其他空白字符都将受到保护 nowrap 强制在同一行内显示所有文本,直...
WPS强制安装和恶意推广的解决方法   阻止推广的程序运行 由于WPS Office在进行网站推广时,会通过一些程序对其进行锁定,因此清除的时候比较麻烦。我在使用时被推广的是淘宝网的链接,下面就以此为例进行操作(图1)。为了避免删除后的旧病复发,首先要阻止推广程序的运行操作,而这利用系统的本地安全策略功能就可以做到。首先...

经验教程

239

收藏

21
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部