WM 用雙緩衝在CStatic上面畫

2022-01-11 10:16:16 字數 1184 閱讀 1371

想了半天,沒想到好的名字,暫時就叫這個名字吧.

native程式設計,貌似除了畫沒有其他好的選擇.其實在**畫不是畫,而我選擇了static控制項,我不覺得在其他控制項上面畫和static控制項上面有什麼本質區別.(我只是覺得static控制項夠簡單,而且還能達到我的目標)

ok.先來說畫.自己畫的畫,唯一需要注意的就是閃屏的問題,而雙緩衝就是用來防止閃屏的,怎麼來做呢?

1. 阻止畫背景.背景我需要自己來畫

2. 建立乙個memdc,所有的畫都在memdc上面完成

3. 把畫好的東西拷貝到dc上面(使用bitblt)

至此,最本質的內容已經介紹完了,下面只是乙個sample,這個sample裡面什麼都沒畫(汗)...

//註冊erasebkgnd和paint訊息

begin_message_map(mystatic, cstatic)

on_wm_erasebkgnd()

on_wm_paint()

end_message_map()

//標頭檔案

class mystatic : public cstatic

afx_msg void onpaint();

declare_message_map()

private:

void paintonmemdc(crect client,cdc* pmemdc);

};//實現

implement_dynamic(mystatic, cstatic)

mystatic::mystatic()

mystatic::~mystatic()

void mystatic::onpaint()

paintonmemdc(client,&m_memdc);

pdc->setbkmode( transparent );

pdc->bitblt( client.left,client.top,client.width(),client.height(),&m_memdc,0,0,srccopy);

m_memdc.deletedc();

}

在這裡畫:

void mystatic::paintonmemdc(crect client,cdc* pmemdc)

只需要在paintonmemdc裡面畫就行了,其他什麼都不需要關心.當然你也可以把這個東西拎出來..

C 實現雙緩衝

1 在記憶體中申請緩衝區,建立相容記憶體 2 建立位圖,並將點陣圖與緩衝區記憶體相關聯起來 3 在相容記憶體裡繪製 4 將繪製好的點陣圖拷貝到當前裝置 5 釋放相容記憶體。cpoint ptcenter crect rect,ellipserect getclientrect rect ptcent...

C 雙緩衝解釋

簡單說就是當我們在進行畫圖操作時,系統並不是直接把內容呈現到螢幕 c 雙緩衝 上,而是先在記憶體中儲存,然後一次性把結果輸出來,如果沒用雙緩衝的話,你會發現在畫圖過程中螢幕會閃的很厲害,因為後台一直在重新整理,而如果等使用者畫完之後再輸出就不會出現這種情況,具體的做法,其實也就是先建立乙個位圖物件,...

C 實現雙緩衝

首先宣告下,這篇資料也是整理別人的資料的基礎上,總結來的。在圖形影象處理過程中,雙緩衝技術是一種比較常見的技術。窗體在響應wm paint訊息時,需要對影象進行繪製處理。如果影象繪製次數過多,重繪過於頻繁時,或者當要繪製的物件太複雜,尤其是含有點陣圖時,一般計算機便力不從心了。顯示器上就會因為重新整...