提升GDI画图的效率
假设我们要画一个坐标图,里面可能还需要画网络线、XY各个单位的值、曲线或直线等,可能的函数代码如下:
void OnPaint ()
{
CPaintDC dc (this);
DrawXY (&dc);
DrawValues (&dc);
}
当然,里面一般要使用双缓冲,以减少闪烁。
画XY的时候,我们知道,我们要进行for 循环,以来画格子或是单位如
|
|
|___________________________________>
0 1 2 3 4 5 6
0~6都是需要用for画出来的。
如果这样的话,每一次OnPaint 都会for,但是,一般情况下,这个图是不会变的(除非改变了窗口大小,或是放大、缩小等),所以我们完成可以先画出来,然后再把它 COPY到 dc里就行了,所以代码可能改成如下:
CDC dcMem; void OnPaint ()
{
CPaintDC dc (this);
if (dcMem.m_hDC == NULL)
{
DrawXY (&dc);
} CDC dcValue;
dcValue.CreateCompatibleDC (&dc);
//....
DrawValue (&dcValue); dc.BitBlt (, , width, height, &dcMem, , , SRCCOPY);
dc.BitBlit (........&dcValue.....);
}
我们使用外部已保存好的 dcMem,如果是第一次,dcMem.m_hDC == NULL, 就创建,那么下一次,我们就不能创建了,可以直接复制 BitBlt (.... SRCCOPY);
提升GDI画图的效率的更多相关文章
- CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率
CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率 当场景中有比较复杂的模型时,条件渲染能够加速对复杂模型的渲染. 条件渲染(Conditio ...
- 提升你的开发效率,10 个 NPM 使用技巧
对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹(npm init),下载npm模块(npm install),创建测试(npm test) 和自定义脚本(npm run).但是, ...
- atitit.提升软件开发的效率and 质量的那些强大概念and方法总结
atitit.提升软件开发的效率and 质量的那些强大概念and方法总结 1. 主流编程中三个最糟糕的问题 1 1.1. 从理解问题后到实现的时间很长 1 1.2. 理解和维护代码 2 1.3. 学 ...
- C# 使用 GDI+ 画图
最近做一个微信公众号服务,有一些简单的图片处理功能.主要就是用户在页面操作,前端做一些立刻显示的效果,然后提交保存时后端真正修改原图. 我们的后端是 ASP.NET,也就是 C# 语言了,C# 本身处 ...
- 提升 Hive Query 执行效率 - Hive LLAP
从 Hive 刚推出到现在,得益于社区对它的不断贡献,使得 Hive执行 query 效率显著提升.其中比较有代表性的功能如 Tez (将多个 job整合为一个DAG job)以及 CBO(Cost- ...
- Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率
前言 大家好,给大家带来Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率的概述,希望你们喜欢 学习目标 掌握两个插件的安装和使用,能够实现 ...
- 提升R代码运算效率的11个实用方法
提升R代码运算效率的11个实用方法 众所周知,当我们利用R语言处理大型数据集时,for 循环语句的运算效率非常低.有许多种方法可以提升你的代码运算效率,但或许你更想了解运算效率能得到多大的提升.本文将 ...
- 分布式协同AI基准测试项目Ianvs:工业场景提升5倍研发效率
摘要:全场景可扩展的分布式协同AI基准测试项目 Ianvs(雅努斯),能为算法及服务开发者提供全面开发套件支持,以研发.衡量和优化分布式协同AI系统. 本文分享自华为云社区<KubeEdge|分 ...
- atitit.提升2--3倍开发效率--cbb体系的建设..
atitit.提升开发效率--cbb体系的建设.. #--提升倍数,大概2--3倍.. #---cbb的内容 知识的,expt的,经验的技术的部件的问题库的角度.. #---cbb的层次,tech l ...
随机推荐
- Azure杂七杂八系列(二) - 如何在Azure上重新配置VM
我们经常遇到这样的问题, 对于已经建立的VM进行性能提升, 比如需要更好的虚拟机或者需要迁移到其他的虚拟网络 那么我们可以使用以下的方法进行修改. 1. 如图所示, TESTVMXX位于North ...
- jquery让一个点击事件刷新页面就自己执行一次的方法
$('name')这个元素之前已经绑定过事件啦,(on绑定)然后直接调用下即可: $('name').click();
- Unity3D Persistent Storage
[Unity3D Persistent Storage] 1.PlayerPrefs类以键值对的形式来提供PersistentStorage能力.提供小额存储能力.(做成sst可以提供大规模数据存储) ...
- leveldb
[LevelDB] LevelDB is a fast key-value storage library that provides an ordered mapping from string k ...
- #用Python直接写UTF-8文本文件
当我们这样建立文件时 f = file('x1.txt', 'w') f.write(u'中文') f.colse() 直接结果应该是类似 f.write(u'中文') UnicodeEncodeEr ...
- Ubuntu 14.04 LTS中怎样解决系统设置残缺的问题
iBus卸载之后,系统设置会缺失,是Ubuntu 14.04和iBus之间的关系引起的,但是如果直接安装 sudo apt-get install ubuntu-desktop 这个会把amazon广 ...
- 【下有对策】verycd没有的资源有很多方法下载
由于国内专门从事假冒电驴官方欺骗中国人的verycd公司出品的冒牌官方电驴"阉割驴"目前已经阉割掉了搜索功能,请电驴爱好者们尽快更换正宗版电驴软件: 电骡--emule官方网站:h ...
- listview的tag
tag,记录一行数据的唯一标识,小DEMO: lsShow.Items.Add("洗衣机"); lsShow.Items[].Tag = "我不愿让你一个人"; ...
- uva 542 - France '98(概率)
题目链接:uva 542 - France '98 题目大意:有16支球队比赛,给出16支球队的名称,然后给出16*16的表格,g[i][j] 表示i队胜j队的概率,问说16支球队获得总冠军的概率. ...
- 读写锁:ReadWriteLock
http://my.oschina.net/20076678/blog/173165 一.在JDK文档中关于读写锁的相关说明 ReadWriteLock 维护了一对相关的 锁 ,一个用于只读操作, ...