双缓冲还闪屏的问题
来源:互联网 发布:淘宝女装背景素材 编辑:程序博客网 时间:2024/04/30 03:08
原理网上好多,不仔细介绍了:
贴一下用过的代码:
我在对话框中的操作,网上大部分是单文档的,所以,绘图还是要在OnPaint()中操作的,调用TryDraw():
void CSHANPingDlg::TryDraw()
{
CPaintDC dc(this);
CDC dcMem;
CBitmap bm;
CRect rc;
GetClientRect(&rc);
// Step 1:为屏幕DC创建兼容的内存DC :CreateCompatibleDC()
dcMem.CreateCompatibleDC(&dc);
// Step 2:创建位图:CreateCompatibleBitmap()
bm.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());
// Step 3:把位图选入设备环境:SelectObject(),可以理解为选择画布
dcMem.SelectObject(&bm);
// dcMem.FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(255,255,255));
dcMem.FillSolidRect(rc,dc.GetBkColor());
// dcMem.SetBkMode(TRANSPARENT);//设置透明背景色
// dcMem.Ellipse(100,100,50+i*5,50+i*5);// 画椭圆
dcMem.MoveTo(50,point1.y);
dcMem.LineTo(point1.x,point1.y);
dcMem.MoveTo(point1.x,50);
dcMem.LineTo(point1.x,point1.y);
// 画其它图形
// Step 4:把绘制好的图形“拷贝”到屏幕上:BitBlt()
dc.BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);
dcMem.DeleteDC();
bm.DeleteObject();
}
以上是双缓冲的绘图过程,但是还是不够的,要阻止背景的不断刷新:
BOOL CSHANPingDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return true;//
// return CDialog::OnEraseBkgnd(pDC);
}
要添加这个消息响应函数,同时修改代码return true即可。
me: 的确, 加了这个return true; 就不闪了(我是在对话框的OnPaint中绘图的);
http://licaiyuren.blog.163.com/blog/static/69654830201010152439345/
- 双缓冲还闪屏的问题
- 双缓冲还闪屏的问题
- c# GDI+的双缓冲问题
- J2ME双缓冲问题
- mfc双缓冲问题
- 解决real缓冲的问题
- printf 缓冲机制的问题
- 图片的三级缓冲问题
- 双缓冲与后备缓冲的区别
- 单缓冲与双缓冲的区别
- 单缓冲与双缓冲的区别
- 应用双缓冲技术解决画面闪烁的问题
- 解决图像刷新问题的VC++双缓冲方法
- VC 中使用双缓冲以及出现的问题总结
- 解决J2ME画面闪烁的问题--双缓冲技术
- 应用双缓冲技术解决画面闪烁的问题
- VC++显示图像闪烁与双缓冲的问题
- 解决MFC屏幕闪动问题:双缓冲的实现(转)
- ADODB类库——数据库管家(一)
- 三层UML图错误总结
- more than and less than
- 验证器(编码方式,验证框架方式)之验证框架方式
- android-SeekBar
- 双缓冲还闪屏的问题
- S3C2440学习笔记
- 老妹的难题
- move_uploaded_file函数
- [Embedded] [FL2440] ADS实验三:LED跑马灯:增加了一个程序启动声音 (运行程序时beep一声)
- jvm 内存 在不同的情况下如何增大 及 PermGen space 相关
- 数据结构应用-------------多项式的相加
- 2011.08.04
- 但愿有人看到这个让我失眠的问题!