mfc雙緩衝技術

2021-09-10 07:33:36 字數 1198 閱讀 8866

mfc繪圖時,頻繁的重新整理會導致螢幕閃爍現象,採用雙緩衝技術可以解決閃爍問題。

主要方法是將影象先存在記憶體中,然後一次性顯示在螢幕上

步驟:去掉背景重新整理

bool c上位機view::onerasebkgnd(cdc* pdc)

在view類中修改ondraw函式

crect rect;

getclientrect(&rect); //獲得視窗客戶區的大小

cdc dcmem; // 建立用於緩衝作圖的記憶體dc物件dcmem

cbitmap bmp; // 建立記憶體中存放臨時影象的點陣圖物件bmp

dcmem.createcompatibledc(pdc); // 依附視窗dc(視窗物件為pdc),建立相容記憶體dc(就是建立乙個記憶體dc,所有圖形先畫在這上面)

bmp.createcompatiblebitmap(pdc, rect.width(), rect.height());// 在相容記憶體dc上,建立相容位圖 ,第乙個引數是pdc,影象才為彩色,若為&dcmem,影象為黑白

dcmem.selectobject(&bmp); // 將位圖選入記憶體dc

dcmem.fillsolidrect(rect, pdc->getbkcolor());// 按照原有背景色填充客戶區,否則會成為黑色,同時也使記憶體dc的背景色保持一致

// 繪圖操作

cstring text1;

aaa++;

text1.format(_t("%d"),aaa);

textout(dc,800,100,text1,lstrlen(text1));

image_show(&dcmem,1);//自己寫的顯示函式

dcmem.fillsolidrect(rect, rgb(0, 110, 110));

//pdc->bitblt(0, 0, rect.width(), rect.height(),&dcmem, 0, 0, srccopy); // 將記憶體dc上的影象複製到前台pdc,即實際螢幕物件pdc

dcmem.deletedc(); // 刪除記憶體dc

bmp.deleteobject(); // 刪除記憶體位圖

MFC 雙緩衝技術

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

MFC雙緩衝技術(Gdi )

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

MFC 雙緩衝技術和相容DC

一 繪圖時螢幕閃爍的原因分析 螢幕閃爍的根本原因是相鄰兩幀影象之間存在的巨大差異造成的,而windows的圖形重新整理方式使得任何兩幀影象之間都存在著巨大的差異。因為windows在進行重新整理之前都會首先將整個螢幕刷成白色,就相當於在電影膠片的相鄰兩幀之間都插入了乙個白色的幀,這也就是為什麼螢幕閃...