国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

可以代替窗體Refresh方法的函數

2024-07-21 02:16:08
字體:
來源:轉載
供稿:網友

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 锡林郭勒盟| 北票市| 津市市| 务川| 沽源县| 石台县| 班玛县| 临澧县| 沿河| 城市| 兴隆县| 崇州市| 桃园市| 城固县| 丰县| 墨玉县| 礼泉县| 余庆县| 昭觉县| 西畴县| 洞口县| 会东县| 军事| 会泽县| 嘉义县| 九寨沟县| 罗城| 海原县| 文安县| 兖州市| 奎屯市| 墨江| 灵川县| 五指山市| 双桥区| 永春县| 卢湾区| 东方市| 榆社县| 贵阳市| 祁阳县|