双缓冲还闪屏的问题
来源:互联网 发布:python return 编辑:程序博客网 时间:2024/04/30 05:54
原理网上好多,不仔细介绍了:
贴一下用过的代码:
我在对话框中的操作,网上大部分是单文档的,所以,绘图还是要在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屏幕闪动问题:双缓冲的实现(转)
- IRP概述
- 驱动和应用层的三种通信方式 (学习)
- 驱动开发基础资料 ( 精华总结)
- MFC----windows控件
- Makefile详解(超级好)
- 双缓冲还闪屏的问题
- InstallShield工程中如何识别初次安装,维护模式和卸载
- [Feature phone系列]Software Architecture 比较
- InstallScript工程中如何修改界面显示字体
- [feature phone系列]平台架构和MMI framework
- InstallShield工程中如何让产品的快捷方式名称始终与产品名保持一致
- 函数----SendMessage
- Quaternion(四元数)和旋转
- 关于Linux Shell的一些初级零碎知识点