想了半天,沒想到好的名字,暫時就叫這個名字吧.
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訊息時,需要對影象進行繪製處理。如果影象繪製次數過多,重繪過於頻繁時,或者當要繪製的物件太複雜,尤其是含有點陣圖時,一般計算機便力不從心了。顯示器上就會因為重新整...