可以代替窗体Refresh方法的函数

VB中打开AutoRedraw可方便的建立双缓冲,利用API在后台绘图,最后一次性整体更新到前台,实现稳定无闪烁的动画效果,一般情况下,VB会自动进行后台到前台的刷新,这主要有两种情况:
1、收到WM_PAIT消息
2、代码调用Refresh方法

能让VB收到WM_PAIT消息的情况主要有
1、窗体被遮盖或隐藏后重现
2、调用任何VB内部的图形方法,包括PaintPicture、Print、Cls、Line、Circle、Pset
3、调用一些与图形方法有关的特殊方法,如:Point、TextWidth、TextHeight

可见让VB自动更新的机会是很多的,也许我们可以不必关心前台更新的问题,但有此类设计经验的朋友,一定注意到了:如果绘图中没有用到任何VB自己的图形方法,采用纯API绘图,或者做一个连续动画,又不便插入Doevents时,前台会得不到更新。这样我们绘了半天,却没看到内容。
Form及PictureBox都有Refresh方法就是为了解决这种情况而设计的,不过,Refresh方法有时会觉得比较浪费,例如,做一个物体移动动画时,只是不断绘制物体相关的一小块区域,可Refresh方法不管你在后台改写了多少内容,哪怕只是很小一块区域,它也是整个客户区的整体重绘,这种速度自然会慢下来。

下面这个函数就是为代替Refresh方法而写的,在全区刷新时,它比Refresh方法略快一点,但若用于局部刷新,它就会快很多很多了。
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Public Sub BoxRefresh(dhwd As Long, dHdc As Long, X As Long, y As Long, w As Long, h As Long)
    Dim fdc As Long
    fdc = GetDC(dhwd)
    BitBlt fdc, X, y, w, h, dHdc, X, y, vbSrcCopy
    ReleaseDC dhwd, fdc
End Sub

我的机器上1024*768*32时窗体最大化,用Refresh方法3000次,用时需8秒多,但若只更新100X100的区域,Refresh方法能做的还是全屏更新,用上面的BoxRefresh,只需78毫秒。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论
在使用谷歌Chrome浏览器的过程中,用户可能会遇到一些特殊的需求,比如在浏览网页的时候需要网页每隔一段时间就自动刷新的插件,这个需求最理想的情况就是像节假日刷火车票一样,用户如果每隔一段时间都手动点击刷新的话,是谁也受不了,所以需要一种插件来帮助自己完成这个重复性的动作。 但是由于刷票这个需求可能不止是要简单地刷新页面,还需要更加个性化的刷新功能的定制,所以今天给大家介绍的这款定时刷新Chrome页面的插件并不适合刷票的行为,上面只是举了一个需要定时刷新页面的例子。 Chrome自动刷新插件:Auto Refresh是一款可以自行在Chrome中定制刷新时间的谷歌浏览器插件,用户只需要简单的设置就可以让Chrome完成有用但无聊的定时重复刷新的操作。 Auto Refresh的使用方式也是非常的简单,可以安装下面的步骤进行: 1.在Chrome浏览器中安装Auto Refresh插件,并在浏览器的右上角点击Auto Refresh插件按钮来启动配置界面。 2.在自动刷新的分钟和秒数中填写相应的数字表示刷新的时间间隔。 3.点击开始按钮来启动Auto Refresh插件的自动刷新功能。 Auto Refresh插件虽然看起来功能非常的简单,但是其在一个特殊的使用场景中会代替用户的劳动力变得非常的有用。如果您对这款插件感兴趣的话可以点击下面的下载链接安装到自己的Chrome浏览器中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

homezj

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值