分享
 
 
 

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

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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毫秒。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有