MFC 双缓冲(double buffering)
2007-11-15 15:47
316 查看
[align=center]MFC 双缓冲(double buffering)[/align]
把image显示在monitor上有多种方法,最简单的就是把image直接画出,但这样会导致画面闪烁(Flicker)。因为每次更新图片时计算机要erase然后redraw,在这个时间段内观察者会看到上一次的背景,但这个时候本应该是显示下一个frame。要解决这个问题,就可以使用双缓冲Double buffering技术。先把image绘制到后台缓冲,等到全部绘好后再copy到screen中显示。
Draw()
{
CPaintDC dc(this);
CDC dcMem;
dc.CreateCompatibleDC(&dc);
CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc,m_Bounds.Width(),m_Bounds.Height());
CBitmap *pOldBitmap = dcMem.SelectObject(&bmp);
Draw(&dcMem);
dc.BitBlt(0,0,m_Bounds.Width(),m_Bounds.Height(),
&dcMem,0,0,SRCCOPY);
dc.SelectObject(pOldBitmap);
}
We can define macros to make this funcationality easy to reach
#define BEGIN_DOUBLE_BUFFERING(pCWnd, pDc) /
CPaintDC dc(pCWnd);/
CDC dcMem;/
CDC *pDc = &dcMem;
dc.CreateCompatibleDC(&dc);/
CBitmap bmp;/
CRect rc;/
GetClientRect(rc);/
bmp.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());/
CBitmap *pOldBitmap = dcMem.SelectObject(&bmp);/
#define END_DOUBLE_BUFFERING(pCWnd, pDc) /
dc.BitBlt(0,0, rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);/
dc.SelectObject(pOldBitmap);/
Then we can use double buffering like below:
DOUBLE_BUFFERING_BEGIN(this, pDc);
pDc->TextOutW(20,20,_T("Your drawing logic"),4);
DOUBLE_BUFFERING_END(this, pDc);
相关文章推荐
- MFC双缓冲 防止闪屏
- MFC加载PNG图片并实现双缓冲
- MFC双缓冲绘制多边形,将图形透明贴在控件上
- MFC双缓冲解决图象闪烁
- MFC 使用双缓冲技术绘制坐标曲线
- MFC基础知识(四)——双缓冲解决刷屏时闪烁
- MFC双缓冲 防止闪屏
- MFC 双缓冲技术解决屏闪问题
- MFC绘图不闪烁——双缓冲技术
- MFC双缓冲和裁剪问题导致闪烁
- MFC中的双缓冲技术(解决绘图闪烁问题)
- MFC SDI 利用双缓冲实现截图程序
- 解决MFC屏幕闪动问题:双缓冲的实现(转)
- MFC 双缓冲 绘图实例
- MFC 双缓冲 GDI+ Graphics 在图片上画图写字 避免闪烁
- MFC下双缓冲解决高速绘制刷新闪烁问题+多媒体定时器
- MFC 双缓冲 绘图时屏幕闪烁问题
- MFC绘图,双缓冲
- MFC双缓冲 防止闪屏
- MFC一个双缓冲的状态栏CStatusBarCtrl