Welcome 微信登录

首页 / 软件开发 / C++

More Effective C++:自增和自减

More Effective C++:自增和自减

More Effective C++:自增和自减2008-01-05很久以前(八十年代),没有办法区分++和--操作符的前缀与后缀调用。这个问题遭到程序员的报怨,于是C++语言得到了扩展,允许重载increment 和 decrement操作符的两种形式。然而有一个句法上的问题,重载函数间的区别决定于它们的参数类型上的差异,但是不论是increment或decrement的前缀还是后缀都只有一个参数。为了解决这个语言问题,C++规定后缀形式有一个int类型...
VC6下的GDI+双缓冲

VC6下的GDI+双缓冲

VC6下的GDI+双缓冲2010-08-22 vckbase yanjie2500一、概述这段时间在研究GDI+双缓冲的实现方法,在网上花了很多时间都没有找到合适的示例,特别是针对VC6的。后来通过对网上资料的分析,和对SDK/MFC的学习,实现了VC6下的GDI+双缓冲,把它写出来与大家分享,希望可以找到更好的实现方法。GDI+的一个优点就是可以直接使用jpg图像,在这个示例中,我没有把图像文件放在资源中,而是动态读取,一是由于项目需求,图像数目是未知的...
More Effective C++:避免缺省构造函数

More Effective C++:避免缺省构造函数

More Effective C++:避免缺省构造函数2008-01-05缺省构造函数(指没有参数的构造函数)在C++语言中是一种让你无中生有的方法。构造函数能初始化对象,而缺省构造函数则可以不利用任何在建立对象时的外部数据就能初始化对象。有时这样的方法是不错的。例如一些行为特性与数字相仿的对象被初始化为空值或不确定的值也是合理的,还有比如链表、哈希表、图等等数据结构也可以被初始化为空容器。但不是所有的对象都属于上述类型,对于很多对象来说,不利用外部数据进...
使用DriverStudio构造USB过滤驱动程序

使用DriverStudio构造USB过滤驱动程序

使用DriverStudio构造USB过滤驱动程序2010-08-22本文分三部分来介绍如何构造一个简单的USB过滤驱动程序,包括“基本原理”、“程序的实现”、“使用INF安装”。此文的目的在于希望读者了解基本原理后,可以使用除DDK以外最流行也最方便的驱动开发工具DriverStudio来实现一个自己的过滤驱动,并正确地安装。一、基本原理 我们知道,WDM(和KDM)是分层的,在构造...
C++类和接口的设计原则探讨

C++类和接口的设计原则探讨

C++类和接口的设计原则探讨2008-01-05我这篇文章的主旨是介绍一部分类和接口的高质量设计的准则。这些准则不但应该保证设计并且实现的类或者接口本身有高质量代码,而且更重要的是在工业领域应该尽可能的使代码的更新和维护不影响客户的活动,主要也就是保持二进制代码兼容(binary compatibility)和源代码兼容(source compatibility)。我希望这些准则能帮助刚从学校进入工业领域的朋友尽快适应更高标准的编程要求,尽快提升自己的设计...
World space到Page space的转换简介

World space到Page space的转换简介

World space到Page space的转换简介2010-09-04刘毓麟一、坐标空间和World space 到Page space的转换坐标空间是一个平面的,在上面图形都是以平面直角坐标定位的。应用程序借助坐标空间可以缩放,平移,剪切,镜像图形的输出。 在Windows GDI中涉及到以下几种坐标空间世界坐标空间(world space)页面坐标空间(page space)设备坐标空间(device space)物理坐标空间(physical d...
C++中用赋值形式op=取代单独形式op

C++中用赋值形式op=取代单独形式op

C++中用赋值形式op=取代单独形式op2008-01-05大多数程序员认为如果他们能这样写代码:x = x + y; x = x - y;那他们也能这样写:x += y; x -= y;如果x和y是用户定义的类型(user-defined type),就不能确保这样。就C++来说,operator+、operator=和operator+=之间没有任何关系,因此如果你想让这三个operator同时存在并具有你所期望的关系,就必须自己实现它们。同理,ope...
浅谈输入法编程

浅谈输入法编程

浅谈输入法编程2010-09-04启程软件一直想写一点关于输入法编程的东西,今天终于有点时间,希望对后来者有点帮助。在此要特别感谢“自由拼音”的作者李振春,我刚开始的几个问题都是在他的帮助下才解决。首先我们需要明白输入法是什么东西。目前常用的输入法基本上有两种类型:外挂式(如早期的万能五笔)及输入法接口式(Input Method Editor-IME)。外挂式比较简单,就是一个exe文件,通过模拟一些Windows输入消息来给当前...
C++内存管理变革

C++内存管理变革

C++内存管理变革2008-01-05引言C/C++语言的内存管理经历了几次变革,但至今仍未能趋于成熟。这几次变革主要包括:1. 从malloc/free到new/delete。这场变革是OOP技术兴起的产物。C++是强类型语言,new/delete的主要成果也就是加强了类型观念,减少了强制类型转换的需求。但是从内存管理角度看,这个变革并没有多少的突破性。2. 从new/delete到内存配置器(allocator)。自从STL被纳入C++标准库后,C++...
轻松实现非客户区按钮

轻松实现非客户区按钮

轻松实现非客户区按钮2010-09-04 VCKBASE POWERCPP一、简介有时我们需要在非客户区(例如:标题栏)添加按钮,并对按钮作出响应,如下图所示:为此我封装了两个类CNCButton和CNCButtonManager,CNCButton主要用于按钮绘制,CNCButtonManager用于按钮的管理并对非客户区的消息进行处理。如下是几个主要的非客户区消息:WM_NCHITTESTWM_NCACTIVATEWM_NCPAINT...
C/C++返回内部静态成员的陷阱

C/C++返回内部静态成员的陷阱

C/C++返回内部静态成员的陷阱2008-01-05背景在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。这是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决方法,如果你熟悉一些标...
多线程管理类

多线程管理类

多线程管理类2010-09-04 vckbase 谭永光由于最近经常搞些跟线程有关的东西,感觉多线程确实麻烦,线程间要处理好同步与通讯,如果用CWinThread好一点,直接是一个线程对象,如果用AfxBeginThread,那必须定个全局函数,或者写个静态函数,一般是传个this指针进去,然后再用这个指针调用本类函数的成员函数,用起来比较麻烦,现在问题是能不能不用全局或者静态函数来实现呢,于是我实现了这个类,来所简化多线程的创建和关闭的操作。现在简要看一...
More Effective C++之考虑变更程序库

More Effective C++之考虑变更程序库

More Effective C++之考虑变更程序库2008-01-05程序库的设计就是一个折衷的过程。理想的程序库应该是短小的、快速的、强大的、灵活的、可扩展的、直观的、普遍适用的、具有良好的支持、没有使用约束、没有错误的。这也是不存在的。为尺寸和速度而进行优化的程序库一般不能被移植。具有大量功能的的程序库不会具有直观性。没有错误的程序库在使用范围上会有限制。真实的世界里,你不能拥有每一件东西,总得有付出。不同的设计者给这些条件赋予了不同的优先级。他们从...
高效开发与彻底测试

高效开发与彻底测试

高效开发与彻底测试2010-09-04王彤一、“千般路”与“磨豆腐”很久以前听一个故事:从前有个小伙子,少时有大志,长大后却无好营生,开了个豆腐作坊,每天磨豆腐累得腰酸背疼。每到夜深人静,小伙子辗转反侧,总想找条更好的“事业之路”,可是想过千百条、尝试过几十条路,都走不通。夜不成寝,白天干活更累,小伙子不由慨叹:“晚上想过千般路,白天还得磨豆腐”。不久以前看过一...
More Effective C++之效率

More Effective C++之效率

More Effective C++之效率2008-01-05 我怀疑一些人在C++软件开发人员身上进行秘密的巴甫洛夫试验,否则为什么当提到“效率”这个词时,许多程序员都会流口水。(Scott Meyers真幽默 译者注)事实上,效率可不是一个开玩笑的事情。一个太大或太慢的程序它们的优点无论多么引人注目都不会为人们所接受。本来就应该这样。软件是用来帮助我们更好地工作,说运行速度慢才是更好的,说需要32MB内存的程序比仅仅需要16M...
对Open CV 中的平面划分相关函数使用探索

对Open CV 中的平面划分相关函数使用探索

对Open CV 中的平面划分相关函数使用探索2010-09-04 vckbase 龚勋任意点集的三角网格化(triangulation)问题一直是人们密切关注的问题。三角网格化问题在许多领域有广泛应用。Delaunay 三角剖分是目前研究应用最广的一种剖分方法,因其具备很多优点,以下简单列举两条:空外接圆性质:在由点集V-生成的D-三角网中,每个三角形的外接圆均不包含该点集的其他任意点。最大最小角度性质:在由点集V-生成的D-三角网中,所有三角形中的最小...
在未来时态下开发C++程序

在未来时态下开发C++程序

在未来时态下开发C++程序2008-01-05 好的软件能够适应变化。它提供新的特性,适应到新的平台,满足新的需求,处理新的输入。新的函数将被加入到函数库中,新的重载将发生,于是要注意那些含糊的函数调用行为的结果;新的类将会加入继承层次,现在的派生类将会是以后的基类,并已为此作好准备;将会编制新的应用软件,函数将在新的运行环境下被调用,它们应该被写得在新平台上运行正确;程序的维护人员通常不是原来编写它们的人,因此应该被设计得易于被别人理解、维护和扩充。这...
从TTF字体中字模信息

从TTF字体中字模信息

从TTF字体中字模信息2010-09-04 vckbase darnshong1、引言传统上的字模信息一般都是从点阵字体中得到的。然而,点阵字体有一个致命的缺点就是字模信息大小固定,放大字体将产生严重的锯齿形失真。本文介绍了一种利用VC从TTF字体中直接获取字符的字模信息的方法,所获取的字模信息可以达到近似无限的分辨率,可选择2级、5级、17级和65级等多种灰度级,最终将字模信息保存为BMP位图文件格式,方便对字模信息的利用。2、TTF介绍TTF是Micr...
<< 61 62 63 64 65 66 67 68 69 70 >>