深度理解:双缓冲技术在MFC界面绘制中的运用
在MFC程序中绘制界面时,如果界面绘制工作比较久或界面结构比较复杂时,常常会出现闪烁的现象。原因有二:
1) MFC程序默认处理WM_ERASEBKGND消息时,会使用窗口类的画刷(通常是白色)将窗口背景擦除。
我们先来看看MSDN上关于WM_ERASEBKGND消息的说法:
WM_ERASEBKGND message
Sent when the window background must be...
实战经验:一种侦测对象重复删除的方法
我们可以在C++中使用new/delete来创建或删除对象,new/delete会调用底层的malloc/free系统函数。但是,如果对同一个对象执行一次以上的delete操作,结果将是undefined的。那我们如何来侦测对象的重复删除呢?
这里有一个思路,在一个类中定义一个const数据成员并在对象创建时初始化为一个特定的值,当对象被delete后,由于此值也会被销毁,可以借此判断对象是否依然...
实战经验:SetWindowLongPtr在开发64位程序的使用方法
在开发某些应用时,需要替换掉原来系统默认的WndProc,使用我们自己定义的WndProc,在32位程序开发下,我们可以使用Win32 API SetWindowLong。以下是该函数的描述:
SetWindowLong function
Changes an attribute of the specified window. The function also sets the 32-bit ...
实战经验:一种按需创建的单件模式
在MFC框架程序中,有一个theApp的唯一全局CWinApp对象,该对象在进入程序入口点之前就开始构造,在程序退出时才离开作用域进行析构。
今天我们探究一种按需创建的单件模式,该模式的特点在于:仅在需要时才创建单件对象。以下先给出演示代码:
先定义一个CTestManager类,该类中定义了一个静态的工厂方法 GetInstance,然后为了使用上的方便,还定义了一个宏theTestMgr。最后...
小技巧:关于CRichEditCtrl的最大字数限制
初次使用CRichEditCtrl控件,有些方法还不熟悉。碰到过这样的情况:使用CRichEditCtrl的StreamIn一个大型文本文件(大约10MB左右)后,显示在控件的内容不完整。一开始还以为是StreamIn的回调函数处理流程有问题,调试过后,发现原因在此:默认情况下,CRichEditCtrl的最大字节数限制为32768,也即:最多只会Stream In这么多Bytes,并且用户无法再...
深度理解:多个auto_ptr同时引用同一个资源对象下的释放问题及赋值问题
首先说一句,auto_ptr已经在C++ 11中已经标注为Deprecated,也即你可以继续使用这玩意,但是在C++持续的演进中,这玩意将慢慢不被主流编译器支持。”Deprecated”,说白了,就是我们在将来可能不支持这个了,现在你可以继续使用,编译器也将继续可以编译通过,趁现在有时间,请尽早使用其他改进方法吧。
1. 多个auto_ptr引用同一个资源对象
下面看一段...
实战经验:CRichEditCtrl的使用方法
RichEditCtrl是一款富文本编辑器控件,相对于CEdit来说,其功能更加强大。另外,它自带RTF格式文本的解析功能。今天就总结一下我在使用这款控件的一些经验。
1. 关于RichEditCtrl的版本
随着Windows每次版本的发布,RichEditCtrl的版本也在不断升级。从最初的1.0版本一直到目前最新的4.1版本。以下版本历史来自的MSDN:
Rich Edit version ...
深度理解:FindClose未调用导致的File内核对象的引用计数问题
应用程序启动后,不可避免的会使用到操作系统提供的文件系统API,比如CreateFile等。当我们有枚举文件或文件夹的需求时,会使用到系统提供的FindFirstFile/FindNextFile/FindClose函数族。
比如,如下的代码为枚举指定路径下所有的文件夹和文件:
void EnumerateFiles(LPCTSTR path)
{
WIN32_FIND_DATA ...
实战经验:自定义函数在STL比较函数sort中的使用
STL库中有自带的排序函数族,今天就来讲讲其中比较常用的sort函数。
该函数可以对容器进行排序,比如如下的代码:
vector<int> vec;
vec.push_back(3);
vec.push_back(5);
vec.push_back(6);
vec.push_back(1);
sort(vec.begin(), vec.end());
经过上述sort...
实战经验:如何检测CMFCTabCtrl控件标签页切换事件
MFC库中经常会使用到的一个控件是Tab标签页控件,这个控件在展现多个平级数据集非常合适。
与控件对应的,是MFC库中的两个类:CMFCTabCtrl和CMFCBaseTabCtrl,其中CMFCTabCtrl继承自CMFCBaseTabCtrl,而CMFCBaseTabCtrl又继承自CWnd。
开发应用程序过程中会有一个需求:Tab标签页何时进行了切换?
下面介绍两个消息:
AFX_WM_CH...


