放于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双缓冲绘图相关推荐

  1. 如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能

    小白摸索着编写一个上位机界面,将遇到的问题及解决方法记录下,以供后来的小白使用哈.这篇文章解决的问题是在绘图时候的闪烁问题.其中网上有些介绍的设置控制方式controlstyle的方法,这个方法我的理 ...

  2. c语言双缓冲怎么用,C语言游戏编程:GDI怎么实现双缓冲绘图去掉闪烁

    在上篇文章中将我要用 C语言重新写一个俄罗斯方块 ,使用的是GDI的绘图模式(目前正在移植到DX上去,想添加一些更好友好的动画).数据与动画分离,动画的帧率保持在30左右.但是绘图的时候画面出现了强烈 ...

  3. MFC绘制动态曲线,用双缓冲绘图技术防闪烁

    转载自:ZHY_ongu的博客:MFC绘制动态曲线,用双缓冲绘图技术防闪烁 先上效果图    随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线. 所谓动画,都是一帧一帧 ...

  4. VC中的双缓冲绘图技术

    之前在做图形绘制的时候,发现在拖动图形时候,会出现闪烁的情况,后来就上网找了一下双缓冲绘图,本文非原创,只是想保存下来,以后要用的时候不用再到处去搜,也希望能帮助有这方面困惑的朋友 原文来自http: ...

  5. 【QT】QT从零入门教程(十三):QT画笔工具QPainter (双缓冲绘图)

      QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage.QOpenGLPaintDevice.QWidget 和QPaintDevice 显示图形(线.形状.渐变等). ...

  6. 【Qt】2D绘图之双缓冲绘图

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制矩形 04. 双缓冲绘图 05. 附录 01. 概述 所谓的双缓冲绘图的概念.双缓冲(double-buffers)绘 ...

  7. [Qt教程] 第18篇 2D绘图(八)双缓冲绘图

    [Qt教程] 第18篇 2D绘图(八)双缓冲绘图 楼主  发表于 2013-5-2 22:07:23 | 查看: 789| 回复: 1 双缓冲绘图 版权声明 该文章原创于Qter开源社区(www.qt ...

  8. android双缓冲绘图技术分析

    转载请说明出处:http://www.jianshu.com/p/efc0bebfd22e 双缓冲.多缓冲技术在计算机科学中其实是一个广义的概念,不过其本质上的意思都是差不多的.今天我们就来讲一讲双缓 ...

  9. Qt之旅---10 双缓冲绘图

    1 基本知识 但我们使用painter进行快速绘图时会看到类似图下 的情况 双缓冲绘图技术 的原理 用两个画布进行绘图,一个用于显示,一个用于绘制,也就是将图画之后再显示 就可以避免上面的情况. 2 ...

最新文章

  1. 还记得Wasserstein GAN吗?
  2. open(/dev/ietctl, O_RDWR) 参数含义
  3. 华为认证网络互连专家-HCIE-RS模拟试卷
  4. NET中的异步编程(二)- 传统的异步编程
  5. labview 软件编程规范
  6. 寻找不合群的数据(异常值)
  7. 小肚皮最新版本_小肚皮旧版本
  8. mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?
  9. php 分页 报表 框架,zentaoPHP框架的分页解决方案
  10. Hbase+Phoenix使用总结
  11. sublime text 插件记录
  12. 使用qq邮箱作为程序客户端自动发送邮件
  13. 荷兰版《口袋妖怪GO》:不找小精灵,找免费啤酒!
  14. uniapp封装方法
  15. adaboost.M1与adaboost.M2差别比较
  16. 电脑文件里哪里能用计算机,计算机管理怎么打开方法图解 计算机管理程序文件在哪里 电脑维修技术网...
  17. Placement blockage types
  18. 高逼格故宫介绍网页源码
  19. Jenkins + Gitlab+ Docker + SpringBoot 构建流水线
  20. BJSubwayPen -- 北京地铁路线图绘制工具 开源啦~~

热门文章

  1. 模板类成员函数特例化写法
  2. Git使用方法(二)-远程库与分支
  3. linux php添加mysql扩展模块_linux下为php添加扩展库的方法
  4. mysql查询连续次数_Mysql如何查询连续的时间次数
  5. android fragment 教程,Android app开发中的Fragment入门学习教程
  6. android购物车栏,Android怎么实现二级列表购物车功能
  7. matlab中的count函数,Excel 中COUNT函数的使用详解,详情介绍
  8. c ++基本数据类型_C ++中的数据类型
  9. 20多个Maven命令和选项(备忘单)
  10. java可选参数_Java可选