MFC 雙緩衝技術和相容DC

2021-08-28 13:04:33 字數 899 閱讀 9282

一、繪圖時螢幕閃爍的原因分析:

螢幕閃爍的根本原因是相鄰兩幀影象之間存在的巨大差異造成的,而windows的圖形重新整理方式使得任何兩幀影象之間都存在著巨大的差異。因為windows在進行重新整理之前都會首先將整個螢幕刷成白色,就相當於在電影膠片的相鄰兩幀之間都插入了乙個白色的幀,這也就是為什麼螢幕閃爍時總是看到乙個隱約的白色視窗在閃爍而不是乙個紅色的視窗在閃爍。雙緩衝圖形重新整理避免了windows重新整理的問題,其沒有在連續的兩幀之間插入白色的幀,從而解決了螢幕閃爍的問題。

二、雙緩衝圖形重新整理的原理

傳統的繪圖方式實際上是一種單緩衝,在windows中每一種裝置都在記憶體中有乙個裝置描述表(dc)與其對應,這個裝置描述表實際上就是乙個記憶體緩衝區。傳統的繪圖中我們是將圖形繪製在裝置描述表緩衝區中,然後由gdi自動的將裝置描述表中的影象拷貝到視訊記憶體中進行顯示。這樣乙個自動的拷貝過程遮蔽了傳統的繪圖方式是單緩衝的實質,使我們感覺到我們是在直接操縱視訊記憶體一樣。雙緩衝圖形重新整理技術在記憶體中有兩片快取,除了裝置描述表以外還有乙個需要手動建立的與裝置描述表緩衝區(前端緩衝區)相相容的後備緩衝區(相容dc)。繪圖過程中,首先將圖形繪製在後備緩衝區中,然後在手動的將後備緩衝區中的影象拷貝到前端緩衝區中,再由gdi自動將前端緩衝區中的影象拷貝到視訊記憶體完成圖形的顯示過程。

三、雙緩衝圖形重新整理的實現步驟

1、建立相容dc。

2、建立點陣圖並載入,並調入相容dc中。(沒有點陣圖的裝置描述表是不能繪圖的)

3、將記憶體裝置描述表中的內容拷貝到視窗裝置描述表

4、釋放裝置描述表控制代碼、點陣圖等資源

例子:在vc 6.0中結合mfc實現雙緩衝圖形重新整理技術

1、首先在ondraw()或者onpaint()中新增下列**

[cpp]view plain

copy

void ondraw(cdc *pdc)  

MFC 雙緩衝技術

在做俄羅斯方塊遊戲的時候,遇到遊戲過程中螢幕閃爍問題,解決辦法如下 使用雙緩衝技術解決螢幕閃爍 修改檢視類的ondraw 函式 void cmytetrisview ondraw cdc pdc 修改檢視類的drawimage 函式 cmytetrisview 訊息處理程式 void cmytetr...

mfc雙緩衝技術

mfc繪圖時,頻繁的重新整理會導致螢幕閃爍現象,採用雙緩衝技術可以解決閃爍問題。主要方法是將影象先存在記憶體中,然後一次性顯示在螢幕上 步驟 去掉背景重新整理 bool c上位機view onerasebkgnd cdc pdc 在view類中修改ondraw函式 crect rect getcli...

MFC雙緩衝技術(Gdi )

1.建立乙個乙個最簡視窗 見前文 2.在stdafx.h中新增對gdi 的支援 include pragma comment lib,gdiplus.lib using namespace gdiplus ulong ptr m tokengdiplus gdiplus gdiplusstartup...