GDI+双缓冲
来源:互联网 发布:淘宝助理csv文件制作 编辑:程序博客网 时间:2024/06/07 03:49
转载至:http://blog.csdn.net/wangjijian/article/details/6070414
网上很多能搜索到的GDI+双缓冲的实现都是有错误的,终于找到了一个正确,分享给大家。
- CPaintDC dc(this);
- CRect rect;
- GetClientRect(&rect);
- Bitmap bmp(rect.right, rect.bottom);
- SolidBrush br(Color(255, 0, 0, 255));
- Graphics* graph = Graphics::FromImage(&bmp);
- graph->Clear(Color::White);
- for(int i=0; i<100; i++)
- {
- graph->FillEllipse(&br, Rect(0, 10+i, 20+i, 30));
- Graphics graphics(dc.m_hDC);
- graphics.DrawImage(&bmp, rect.left, rect.top, rect.right, rect.bottom);
- }
这里是在WM_PAINT消息里面处理的。首先创建一个Bitmap的对象,用来在上面进行画图。接着创建一个与之关联的Graphics对象。注意到上面调用了Graphics对象的Clear来把它刷成白色,至于作用等下再说明。
这时候就可以用graph进行画画了,这时候其实都只是画到Bitmap对象上去,还没有画到窗口上去,也就是只是先保存到内存中而已。
接着就创建一个与hdc相关联的Graphics对象了,这时候用graphics所做的操作都会显示到窗口上了。但由于我们之前是先把所有的操作在内存里都做好,再一次性显示到屏幕上,这样就提高了绘图速度。
但其实现在运行一下程序还是发现在缩放窗口时图片会闪烁,这里的原因是由于在缩放时程序会自动刷新背景,这时候就要在处理WM_ERASEBKGND消息时直接return TRUE。这样就告诉Windows我们会自己进行刷新,但实际上这时我们什么都没做。上面调用了Graphics对象的Clear方法就是来处理背景的刷新,由于这时是在内存中做好的,所以就不会再出现闪烁的问题了。
0 0
- GDI双缓冲绘图
- gdi+ 双缓冲技术
- GDI双缓冲绘图
- GDI+双缓冲
- GDI+中的双缓冲
- GDI+ VC双缓冲
- gdi+ 双缓冲技术
- GDI+ 双缓冲
- windows gdi 双缓冲
- GDI 双缓冲贴图
- GDI+ 双缓冲实现
- GDI+ 双缓冲实现
- GDI+双缓冲
- GDI+ 双缓冲模板
- GDI双缓冲绘图
- GDI+双缓冲
- GDI+双缓冲
- GDI双缓冲绘图
- 动态代理 Proxy InvocationHandler
- android中popupwindow弹出后,屏幕背景变成半透明
- Context.getExternalFilesDir()和Context.getExternalCacheDir()方法
- C++PRIMER 学习笔记
- 关于makefile
- GDI+双缓冲
- Android实现读取相机(相册)图片并进行剪裁
- JFinal学习--04Handler
- css3之渐变
- Qt 解析网络数据出现ssl错误
- Linux 安装 mysql
- iOS UITableCell复用
- 关于mysql使用mysqlbinlog恢复被删除的数据的问题
- gulp详细入门教程