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

2016-01-29 13:04 74 1 收藏

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

【 tulaoshi.com - ASP.NET 】


VB中打开AutoRedraw可方便的建立双缓冲,利用API在后台绘图,最后一次性整体更新到前台,实现稳定无闪烁的动画效果,一般情况下,VB会自动进行后台到前台的刷新,这主要有两种情况:1、收到WM_PAIT消息2、代码调用Refresh方法
能让VB收到WM_PAIT消息的情况主要有1、窗体被遮盖或隐藏后重现2、调用任何VB内部的图形方法,包括PaintPicture、Print、Cls、Line、Circle、Pset3、调用一些与图形方法有关的特殊方法,如: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 LongPrivate Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As LongPrivate 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, fdcEnd Sub
我的机器上1024*768*32时窗体最大化,用Refresh方法3000次,用时需8秒多,但若只更新100X100的区域,Refresh方法能做的还是全屏更新,用上面的BoxRefresh,只需78毫秒。

来源:http://www.tulaoshi.com/n/20160129/1488737.html

延伸阅读
普通的窗体都是方方的,使用API函数可以做出一些奇怪的形状。比如,窗体是圆角矩形,在中间挖一个椭圆形的洞。 先要理解一个重要的概念:区域。区域是描述设备场景中某一块的GDI对象,每个区域都有一个句柄。一个区域可以是矩形,也可以是复杂的多边形,甚至是几个区域组织在一起。窗体默认的区域就是我们看到的矩形,当然它并非一定要...
Private mouse_offset As Point Private Sub form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown mouse_offset = New Point(e.X, e.Y) End Sub Private Sub form1_MouseMove(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyB...
化妆棉可以用什么代替 化妆棉可以用什么代替——护肤篇 涂抹水乳时,如果没有化妆棉,可以直接用手来涂抹。用手涂抹需要手法细致,不要遗漏掉鼻翼等一些小角落,涂抹完之后要轻压、按摩促进吸收,确保每一步的都吸收后再涂抹下一步的。如果比较赶时间,就用可湿水的纸巾来涂抹,这种纸巾不会掉纸屑,而且基本上涂完一种护肤品就能涂下...
标签: 电脑入门
大家眼里键盘的作用是不是就平时打打字,玩玩游戏,其实键盘可以代替鼠标操作电脑的,很多朋友肯定觉得奇怪,但是你得记住一下我们文章才能真正运用自如呢! 一、常用快捷键用法: F1显示当前程序或者windows的帮助内容。 F2当你选中一个文件的话,这意味着重命名 F3当你在桌面上的时候是打开查找:所有文件 对话框 F10或ALT激活当前程序的...
import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.UIManager; class Mywindow extends JFrame { JButton button1; JButton button2; JInternalFrame interframe1,interframe2; JPanel jpanel; Mywindow() { setVisible(true); //setSize(400,400)见下面的说明! jpanel=(JPanel)this.getContentPane(); ...

经验教程

247

收藏

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