C 零食 WTL中使用雙緩衝避免閃爍

2021-09-02 16:36:06 字數 2062 閱讀 3515

雙緩衝的原理可以這樣形象的理解:把電腦螢幕看作一塊黑板。首先我們在記憶體環境中建立乙個「虛擬「的黑板,然後在這塊黑板上繪製複雜的圖形,等圖形全部繪製完畢的時候,再一次性的把記憶體中繪製好的圖形「拷貝」到另一塊黑板(螢幕)上。採取這種方法可以提高繪圖速度,極大的改善繪圖效果。

例如在ondraw()函式中可以如下所述實現雙緩衝,其主要步驟分為四步:

cpen pen;

pen.createpen(ps_insideframe,1,rgb(225,225,0));

cbrush brush;

brush.createsolidbrush(rgb(225,225,0));

cdc dcmem;

cbitmap bm;

crect rc;

getclientrect(&rc);

// step 1:為螢幕dc建立相容的記憶體dc :createcompatibledc()

dcmem.createcompatibledc(pdc);

// step 2:建立位圖:createcompatiblebitmap()

bm.createcompatiblebitmap(pdc,rc.width(),rc.height());

// step 3:把點陣圖選入裝置環境:selectobject(),可以理解為選擇畫布

dcmem.selectobject(&bm);

dcmem.selectobject(pen);

dcmem.selectobject(brush);

dcmem.ellipse(0,0,50,50);//畫橢圓

// step 4:把繪製好的圖形「拷貝「到螢幕上:bitblt()

pdc->bitblt(0,0,rc.width(),rc.height(),&dcmem,0,0,srccopy);

dcmem.deletedc();

bm.deleteobject();

這樣便實現了雙緩衝,通過這個方法可以防止在vc中畫圖時出現螢幕閃爍的情況。

在自己畫的視窗中,有時候會有閃爍現象。為什麼會有閃爍現象呢?其實是因為程式在畫視窗時需要用背景色清空顯示區域,然後再畫。由於這兩者的反差比較大,就會被人眼睛捕捉到,感覺閃爍。

雙緩衝就是先在記憶體中把圖畫好,然後直接複製到螢幕上去,這樣的反差就比較小,也就不覺得閃爍了。

wtl中有現成的雙緩衝類實現,可以很方便的使用就達到效果。

cdoublebufferimpl 在atlframe.h中。

1.首先繼承自cdoublebufferimpl

class 

tctrl:

public

cwindowimpl

< tctrl>,

public

wtl::cdoublebufferimpl

// 繼承雙緩衝類

2.由於雙緩衝類中已經處理了wm_erasebkgnd 和wm_paint訊息,所以需要從你的**中刪除對這些訊息的處理。然後加上雙緩衝的訊息處理即可。

begin_msg_map(tctrl)

// message_handler(wm_paint, onpaint)

chain_msg_map( wtl::cdoublebufferimpl

)end_msg_map()

3.增加乙個dopaint函式,函式宣告如下:

void 

dopaint(cdchandle dc);

4.將原來onpaint函式中的**移到dopaint中,注意原來的cpaintdc需要改用引數中的cdchandler

void 

tctrl::dopaint( cdchandle dc )

ok,編譯吧。

vc畫圖不閃爍的方法(雙緩衝技術)

走近wtl--gdi篇

visual c++中實現雙緩衝的基本原理

C 零食 WTL中使用雙緩衝避免閃爍

在自己畫的視窗中,有時候會有閃爍現象。為什麼會有閃爍現象呢?其實是因為程式在畫視窗時需要用背景色清空顯示區域,然後再畫。由於這兩者的反差比較大,就會被人眼睛捕捉到,感覺閃爍。雙緩衝就是先在記憶體中把圖畫好,然後直接複製到螢幕上去,這樣的反差就比較小,也就不覺得閃爍了。wtl中有現成的雙緩衝類實現,可...

零食小餅乾

吃貨的最高境界就是把喜歡吃的東西用自己的雙手做出來 哈哈哈.廢話不多說了,直接開始做餅乾吧!材料 低筋麵粉 554克 糖粉 150克 無鹽黃油 227克 雞蛋 3個 奶粉 60克 1 黃油隔水融化,用打蛋器攪拌均勻。2 分別加入糖粉,奶粉,攪拌均勻。要加糖粉或者糖霜類,這樣才可以融化哦!3 雞蛋分次...

ZZULI 吃零食 貪心

時間限制 1 sec 記憶體限制 128 mb 快要到期末了,pht在這兩天好忙啊。經過幾個小時的奮戰,他終於把實驗報告寫完了,但是他因此錯過了午飯時間,pht覺得自己好餓。這時他發現在旁邊xcp的位置上有好多零食,pht決定偷偷的拿一點他的零食吃 一共有n種零食,每種零食有ai袋 為了使xcp不容...