MFC雙緩存技術解決閃屏_第1頁
MFC雙緩存技術解決閃屏_第2頁
MFC雙緩存技術解決閃屏_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、我們的繪圖過程大多放在OnDraw或者OnPaint函數(shù)中,OnDraw在進行屏幕顯示時是由OnPaint進行調(diào)用的。當窗口由于任何原因需要重繪時,總是先用背景色將顯示區(qū)清除,然后才調(diào)用OnPaint,而背景色往往與繪圖內(nèi)容反差很大,這樣在短時間內(nèi)背景色與顯示圖形的交替出現(xiàn),使得顯示窗口看起來在閃。這就要用到雙緩存的方法了。雙緩沖就是除了在屏幕上有圖形進行顯示以外,在內(nèi)存中也有圖形在繪制。我們可以把要顯示的圖形先在內(nèi)存中繪制好,然后再一次性的將內(nèi)存中的圖形按照一個點一個點地覆蓋到屏幕上去(這個過程非???,因為是非常規(guī)整的內(nèi)存拷貝)。這樣在內(nèi)存中繪圖時,隨便用什么反差大的背景色進行清除都不會閃,

2、因為看不見。當貼到屏幕上時,因為內(nèi)存中最終的圖形與屏幕顯示圖形差別很小(如果沒有運動,當然就沒有差別),這樣看起來就不會閃。雙緩存:就是在內(nèi)存中準備一塊區(qū)域,把要顯示的位圖都加載到內(nèi)存中,然后調(diào)用BitBlt函數(shù),把內(nèi)存設備復制到顯示設備上,這樣就可以防止閃屏了.下面是在VC中,實現(xiàn)的步驟:1新建一單文檔MFC程序,取名為testl.2在CTestIView中添加兩個成員函數(shù)voidShowBmpUseDbBuffer();用雙緩存顯示位圖voidShowBmp();沒有使用雙緩存就顯示位圖.添加一菜單命令,啟動Timer,觀察兩種效果3主要實現(xiàn)代碼如下:/使用雙緩存技術,顯示位圖,防止閃屏v

3、oidCTest1View:ShowBmpUseDbBuffer()CDC*pDC=GetDC();CBitmapBmpBack,BmpFront,BmpMem;/背景,前景,內(nèi)存位圖CDCBackDC,FrontDC,MemDC;/背景設備,前景設備,內(nèi)存設備/創(chuàng)建與顯示設備兼容的位圖BmpMem.CreateCompatibleBitmap(pDC,1024,768);/加載位圖BmpBack.LoadBitmap(IDB_BITMAP_BACK);BmpFront.LoadBitmap(IDB_BITMAP_FRONT);/創(chuàng)建與顯示設備兼容的設備BackDC.CreateCompati

4、bleDC(pDC);FrontDC.CreateCompatibleDC(pDC);MemDC.CreateCompatibleDC(pDC);/將位圖選入設備MemDC.SelectObject(&BmpMem);BackDC.SelectObject(&BmpBack);MemDC.BitBlt(0,0,1024,768,&BackDC,0,0,SRCCOPY);/將前景位圖選入設備FrontDC.SelectObject(&BmpFront);MemDC.BitBlt(0,0,1024,768,&FrontDC,0,0,SRCCOPY);/只一次性的向顯示設備顯示位圖,不會出現(xiàn)閃屏pD

5、C-BitBlt(0,0,1024,768,&MemDC,0,0,SRCAND);/釋放資源pDC-DeleteDC();BackDC.DeleteDC();FrontDC.DeleteDC();MemDC.DeleteDC();/沒有使用雙緩存技術,出現(xiàn)閃屏voidCTest1View:ShowBmp()CDC*pDC=GetDC();CBitmapBmpBack,BmpFront;/背景,前景位圖CDCBackDC,FrontDC;/背景設備,前景設備,內(nèi)存設備/加載位圖BmpBack.LoadBitmap(IDB_BITMAP_BACK);BmpFront.LoadBitmap(IDB_

6、BITMAP_FRONT);/創(chuàng)建與顯示設備兼容的設備BackDC.CreateCompatibleDC(pDC);FrontDC.CreateCompatibleDC(pDC);/將背景位圖選入設備BackDC.SelectObject(&BmpBack);pDC-BitBlt(0,0,1024,768,&BackDC,0,0,SRCCOPY);/顯示背景位圖/將前景位圖選入設備FrontDC.SelectObject(&BmpFront);pDC-BitBlt(0,0,1024,768,&FrontDC,0,0,SRCCOPY);/顯示前景位圖/分兩次的顯示位圖(先顯示背景,再顯示前景),

7、結果就出現(xiàn)了閃屏./釋放資源pDC-DeleteDC();BackDC.DeleteDC();FrontDC.DeleteDC();/添加一菜單命令,啟動一個TimervoidCTest1View:OnMenuitemStart()/TODO:AddyourcommandhandlercodehereSetTimer(1,5,NULL);/添加一菜單命令,啟動一個TimervoidCTest1View:OnMenuitemStart()/TODO:AddyourcommandhandlercodehereSetTimer(1,5,NULL);CView:OnTimer(nIDEvent);在OnTimer()函數(shù)中,查看兩種效果voidCTest1View:OnTimer(UINTnIDEvent)/TODO:Addyourmessagehandler

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論