CStatic类的GDI双缓冲绘图
放于OnPaint函数的代码:
CPaintDC dc(this); // device context for painting// TODO: Add your message handler code here CPaintDC* pDC = &dc;CRect client;GetClientRect(&client);CDC MemDc; //首先定义一个显示设备对象CBitmap MemMap; //定义一个位图对象MemDc.CreateCompatibleDC(pDC); //创建一个与指定设备兼容的内存设备上下文环境MemMap.CreateCompatibleBitmap(pDC, client.Width(), client.Height());MemDc.SelectObject(&MemMap); //将位图选入到内存显示设备中MemMap.DeleteObject(); //释放设备MemDc.SetBkMode(TRANSPARENT); //设置背景为透明//自己的要画的图像存到虚拟的dc中//Draw(&MemDc,client);pDC->SetBkMode(TRANSPARENT); //设置背景为透明pDC->BitBlt(client.left, client.top, client.Width(), client.Height(), &MemDc, 0, 0, SRCCOPY); //复制到pDC中MemDc.DeleteDC(); //释放设备
以上的步骤大致可理解为:
步骤:1、取出dc地址存于一个指针中,并获取窗口大小备用;
2、定义一个显示设备对象和一个位图对象,显示设备相当于一个画框,这是虚拟的,位图相当于是画布。将这个画布 定义和窗口一样大小,并将画布贴到画框上形成一个整体,并释放设备;
3、然后将要显示的图像存放到这个虚拟的dc中,存完之后再将这个虚拟dc中的图像复制到显示的dc中显示。
关于上面代码里的draw函数(也就是各自的画图函数),我在这举个例子:
void CDispaly::Draw(CDC* pMemDc , CRect client) //画道路函数
{ CPen newPen; // 用于创建新画笔 pMemDc->FillSolidRect(0,0, client.Width(),client.Height(),RGB(255,255,255));//先用背景色将位图清除干净,颜色自选newPen.CreatePen(PS_SOLID , 5, RGB(255,255,0)); //PS_SOLID代表线形实线,线宽为5pMemDc->SelectObject(&newPen); //把一个对象(位图、画笔、画刷等)选入指定的设备描述表pMemDc->MoveTo(0,7); //移动到起始点pMemDc->LineTo(1200,7); //画线到终点pMemDc->FillSolidRect(0, 10, 1200, 80, RGB(128,128,128)); //填充某一个区域pMemDc->MoveTo(0,92); //移动到起始点pMemDc->LineTo(1200,92); //画线到终点pMemDc->FillSolidRect(0,95, 1200,80,RGB(128,128,128)); //填充某一个区域pMemDc->MoveTo(0,177); //移动到起始点pMemDc->LineTo(1200,177); //画线到终点pMemDc->FillSolidRect(0,180, 1200,80,RGB(128,128,128)); //填充某一个区域pMemDc->MoveTo(0,262); //移动到起始点pMemDc->LineTo(1200,262); //画线到终点newPen.DeleteObject(); //删除画笔
}
CStatic类的GDI双缓冲绘图相关推荐
- 如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能
小白摸索着编写一个上位机界面,将遇到的问题及解决方法记录下,以供后来的小白使用哈.这篇文章解决的问题是在绘图时候的闪烁问题.其中网上有些介绍的设置控制方式controlstyle的方法,这个方法我的理 ...
- c语言双缓冲怎么用,C语言游戏编程:GDI怎么实现双缓冲绘图去掉闪烁
在上篇文章中将我要用 C语言重新写一个俄罗斯方块 ,使用的是GDI的绘图模式(目前正在移植到DX上去,想添加一些更好友好的动画).数据与动画分离,动画的帧率保持在30左右.但是绘图的时候画面出现了强烈 ...
- MFC绘制动态曲线,用双缓冲绘图技术防闪烁
转载自:ZHY_ongu的博客:MFC绘制动态曲线,用双缓冲绘图技术防闪烁 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线. 所谓动画,都是一帧一帧 ...
- VC中的双缓冲绘图技术
之前在做图形绘制的时候,发现在拖动图形时候,会出现闪烁的情况,后来就上网找了一下双缓冲绘图,本文非原创,只是想保存下来,以后要用的时候不用再到处去搜,也希望能帮助有这方面困惑的朋友 原文来自http: ...
- 【QT】QT从零入门教程(十三):QT画笔工具QPainter (双缓冲绘图)
QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage.QOpenGLPaintDevice.QWidget 和QPaintDevice 显示图形(线.形状.渐变等). ...
- 【Qt】2D绘图之双缓冲绘图
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制矩形 04. 双缓冲绘图 05. 附录 01. 概述 所谓的双缓冲绘图的概念.双缓冲(double-buffers)绘 ...
- [Qt教程] 第18篇 2D绘图(八)双缓冲绘图
[Qt教程] 第18篇 2D绘图(八)双缓冲绘图 楼主 发表于 2013-5-2 22:07:23 | 查看: 789| 回复: 1 双缓冲绘图 版权声明 该文章原创于Qter开源社区(www.qt ...
- android双缓冲绘图技术分析
转载请说明出处:http://www.jianshu.com/p/efc0bebfd22e 双缓冲.多缓冲技术在计算机科学中其实是一个广义的概念,不过其本质上的意思都是差不多的.今天我们就来讲一讲双缓 ...
- Qt之旅---10 双缓冲绘图
1 基本知识 但我们使用painter进行快速绘图时会看到类似图下 的情况 双缓冲绘图技术 的原理 用两个画布进行绘图,一个用于显示,一个用于绘制,也就是将图画之后再显示 就可以避免上面的情况. 2 ...
最新文章
- 还记得Wasserstein GAN吗?
- open(/dev/ietctl, O_RDWR) 参数含义
- 华为认证网络互连专家-HCIE-RS模拟试卷
- NET中的异步编程(二)- 传统的异步编程
- labview 软件编程规范
- 寻找不合群的数据(异常值)
- 小肚皮最新版本_小肚皮旧版本
- mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?
- php 分页 报表 框架,zentaoPHP框架的分页解决方案
- Hbase+Phoenix使用总结
- sublime text 插件记录
- 使用qq邮箱作为程序客户端自动发送邮件
- 荷兰版《口袋妖怪GO》:不找小精灵,找免费啤酒!
- uniapp封装方法
- adaboost.M1与adaboost.M2差别比较
- 电脑文件里哪里能用计算机,计算机管理怎么打开方法图解 计算机管理程序文件在哪里 电脑维修技术网...
- Placement blockage types
- 高逼格故宫介绍网页源码
- Jenkins + Gitlab+ Docker + SpringBoot 构建流水线
- BJSubwayPen -- 北京地铁路线图绘制工具 开源啦~~
热门文章
- 模板类成员函数特例化写法
- Git使用方法(二)-远程库与分支
- linux php添加mysql扩展模块_linux下为php添加扩展库的方法
- mysql查询连续次数_Mysql如何查询连续的时间次数
- android fragment 教程,Android app开发中的Fragment入门学习教程
- android购物车栏,Android怎么实现二级列表购物车功能
- matlab中的count函数,Excel 中COUNT函数的使用详解,详情介绍
- c ++基本数据类型_C ++中的数据类型
- 20多个Maven命令和选项(备忘单)
- java可选参数_Java可选