基于双缓冲技术解决视图刷新重绘闪烁问题
2017-03-20 16:00
429 查看
基于双缓冲技术解决视图刷新重绘闪烁问题
1.基本原理
普通视图绘制完成后直接在显示器窗口中显示,所以出现闪烁的现象。双缓冲技术,简单来说就是创建一块虚拟的内存区来存储画布,而显示器中只显示实际显示缓冲区的画布。如下图所示:
2.基本步骤
1)在OnTimer中刷新或者其他地方执行刷新动作时,视图会进行重绘。2)在OnPaint中添加代码:
void CTranLightView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
/*
双缓冲技术解决屏幕刷新闪烁问题
*/
// 获取窗口客户区
CRect rect;
GetClientRect(&rect);
//用于缓冲作图的内存DC
CDC dcMem;
//内存中承载临时图象的位图
CBitmap bmp;
//依附窗口DC创建兼容内存DC
dcMem.CreateCompatibleDC(&dc);
//创建兼容位图
bmp.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
//将位图选择进内存DC
CBitmap *pOldBmp = dcMem.SelectObject(&bmp);
// 绘制图形
OnDraw(&dcMem);
// 将内存DC上的图象拷贝到前台
dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBmp);
DeleteObject(&bmp); // 删除位图
dcMem.DeleteDC(); // 删除DC
DeleteObject(pOldBmp); // 删除备份位图
// Do not call CView::OnPaint() for painting messages
}
3)在OnEraseBkGround中重载:
BOOL CTranLightView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
//OnDraw(this->GetDC());
//创建黑色视图背景
//CRect rectClient;
//GetClientRect(rectClient);
//pDC->FillSolidRect(rectClient,RGB(0,0,0));
return TRUE;
//return CView::OnEraseBkgnd(pDC);
}
相关文章推荐
- 使用双缓冲技术解决动画播放闪烁问题
- 双缓冲解决高频率刷新界面闪烁问题(C#)
- 双缓冲技术解决MFC重绘闪烁问题
- MFC下双缓冲解决高速绘制刷新闪烁问题+多媒体定时器
- MFC中的双缓冲技术(解决绘图闪烁问题)
- 应用双缓冲技术解决画面闪烁的问题
- 双缓冲加重载onpaint,OnEraseBkgnd解决屏幕闪烁问题
- 在vc中如何用双缓冲的方法解决重绘闪屏的问题
- 【JAVA】用双缓冲技术解决repaint闪烁
- 双缓冲方法解决屏幕刷新闪烁的问题
- MFC 双缓冲技术解决屏闪问题
- 应用双缓冲技术解决J2ME中的画面闪烁的问题
- 三行代码解决 winform 重绘闪烁,窗口重绘效率低下的问题
- 使用 GDI+ 双缓冲 解决绘图闪烁问题
- 【Delphi】使用双缓冲解决图片切换时的闪烁问题
- c#解决窗口背景贴图刷新,放大后图像闪烁问题
- 真正的创新必然是基于对市场的了解,对客户反馈的观察,开发出来的产品一定要适应市场,提出的模式一定要能解决现实的问题。而在这其中,技术只是一种实现手段。
- 解决J2ME画面闪烁的问题--双缓冲技术
- 关于MFC OnDraw重绘时画面闪烁问题的解决
- 应用双缓冲技术解决画面闪烁的问题