2010年6月1日
摘要:
在用VC开发应用程序时,经常会要做一些可以改变大小的对话框,而这个时候就要求对话框上的控件会随着对话框大小的改变而改变自己的位置和大小。如果控件比较少,那可以在对话框的OnSize()事件里面添加代码,通过计算来调整各个控件的位置和大小;但是,如果对话框上的控件比较多的话,那这将是一件非常痛苦的事情!要是程序中又有很多可以改变大小的对话框,那一个一个的OnSize()写下来,那会使程序员崩溃的! ...
阅读全文
posted @ 2010-06-01 00:13
carekee
阅读(328)
推荐(1)
摘要:
现在有很多软件都支持拖拽功能,就是用鼠标拖着文件放到软件窗口中某个位置,软件就可以做出相应的反应。比如,Windows自带的播放软件Windows Media Player,你可以拖着一个媒体文件放到它的主窗口中,它就会开始播放这个文件。 怎么让自己的软件也有这个功能呢? 其实,并不是很难,只要让你需要有拖拽功能的控件响应WM_DROPFILES消息就行了。下面以Edit控件和ListBox控件为...
阅读全文
posted @ 2010-06-01 00:13
carekee
阅读(1252)
推荐(0)
摘要:
1.让List Control有Check Box用SetExtendedStyle方法可以设置,看代码:(CListCtrl m_ListCtrl;)DWORD dwStyle = m_ListCtrl.GetStyle();dwStyle |= LVS_EX_CHECKBOXES;m_ListCtrl.SetExtendedStyle(dwStyle);2.让List Box有Check Bo...
阅读全文
posted @ 2010-06-01 00:12
carekee
阅读(282)
推荐(0)
摘要:
VC中的Slider的Tooltips只能显示表示当前位置的int型值,可是有时候,这种Tooltips并不够用。比如,在一个视频录制的小软件中,可能会需要类似“总共500帧,当前是第13帧”的Tooltips;或者有些时候想在Tooltips中显示float型的值。 在这些时候我们就只能用CToolTipCtrl配合TTN_NEEDTEXT消息来实现我们的定制Toolt...
阅读全文
posted @ 2010-06-01 00:11
carekee
阅读(492)
推荐(0)
2010年5月31日
摘要:
GDI+ 是GDI(Windows 早期版本提供的图形设备接口)的后续版本,是Microsoft Windows XP作系统即后续版本的图形显示技术。它已经集成到了.Net开发环境中,所以不管你的OS是什么版本,只要安装了.Net框架,就有了GDI+(注意:是.Net框架,而不是.Net开发环境,所以Win98中也可以使用GDI+)。 现在,言归正传。 在头文件中加入下面的代码:#include ...
阅读全文
posted @ 2010-05-31 23:50
carekee
阅读(668)
推荐(0)
摘要:
在数学中用gcd(a, b)来表示两个正整数a和b的最大公约数。而且存在下面这个最大公约数递归定理: gcd(a, b) = gcd(b, a mod b) (mod表示取余数) 欧几里得在《几何原本》中描述了利用上面的定理递归求两个正整数的最大公约数的算法。实现起来非常简单,下面是C++代码:unsigned int Euclid(unsigned int nA, unsigned int n...
阅读全文
posted @ 2010-05-31 23:46
carekee
阅读(490)
推荐(0)
摘要:
Fibonacci(斐波那契)序列的递归算法大家都已经很熟悉了:// Fibonacci序列第n项的值// 递归算法unsigned int Fib1(unsigned int n){ if (n == 1 || n == 2) return 1; else return Fib(n - 1) + Fib(n - 2);} 而且递归算法的缺点是效率太低,下面是非递归算法:// Fibonacci序...
阅读全文
posted @ 2010-05-31 23:45
carekee
阅读(753)
推荐(0)
摘要:
在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数。下面就是一个例子:class CBaseA{public: virtual void TestA();};class CBaseB{public: virtual void TestB();};class CDerived : public CBaseA, public CBaseB{public: virtual void TestA...
阅读全文
posted @ 2010-05-31 23:43
carekee
阅读(748)
推荐(1)
摘要:
一个map就是一个(关键码(key),值(value))对偶的序列,它提供基于关键码的快速提取操作。也就是说,可以用下标运算符[]将关键码作为下标去执行查找,并返回对应的值。因此可以把map的使用方法想象成有特殊下标的数组。在很多时候用下标运算符[]来对map中的元素进行存取是非常方便和简单的;但是,如果map下标运算符[]运用不得当,也会造成意想不到的问题。 我们知道,C++是不检查下标越界的。...
阅读全文
posted @ 2010-05-31 23:42
carekee
阅读(990)
推荐(0)
摘要:
有下面的一个简单的类:class CNullPointCall{public: static void Test1(); void Test2(); void Test3(int iTest); void Test4();private: static int m_iStatic; int m_iTest;};int CNullPointCall::m_iStatic = 0;void CNull...
阅读全文
posted @ 2010-05-31 23:41
carekee
阅读(213)
推荐(0)
摘要:
在我那篇《浅析C++中的this指针》中,我通过分析C++代码编译后生成的汇编代码来分析this指针的实现方法。这次我依然用分析C++代码编译后生成的汇编代码来说明C++中虚函数调用的实现方法,顺便也说明一下C++中的对象内部布局。下面所有的汇编代码都是用VC2005编译出来的。虽然,不同的编译器可能会编译出不同的结果,对象的内部布局也不尽相同;但是,只要是符合C++标准的编译器,编译结果和对象的...
阅读全文
posted @ 2010-05-31 23:41
carekee
阅读(257)
推荐(1)
摘要:
现在,有下面的代码:namespace lx1{ class Point3d { public: Point3d (double dx, double dy, double dz) : m_dX(dx), m_dY(dy), m_dZ(dz) {} double getX() const { return m_dX; }; double getY() const { return m_dY; };...
阅读全文
posted @ 2010-05-31 23:40
carekee
阅读(444)
推荐(0)
摘要:
写这篇文章的动机来源于网友purewinter在我的那篇《重读《设计模式》之学习笔记(三)--SINGLETON模式的疑惑》中的评论。 在那篇文章中,我提供了如下一个用C++实现的Singletion模式的小例子:class ClxSingletonMEC{public: friend ClxSingletonMEC& InstanceMEC();private: ClxSingleton...
阅读全文
posted @ 2010-05-31 23:39
carekee
阅读(405)
推荐(0)
摘要:
在开发中,经常会用到一些数组,它里面存放一定数量(已知,不是太多)的特定元素。在使用数字表示的数组下标访问数组中元素的时候,根本不知道该元素是否是需要的那个元素,而且使代码可读性降低,甚至还会出现下标越界的危险。 比如,现在有如下的继承体系:class CShape;class CSquare : public CShape;class CRectangle : public CShape;cla...
阅读全文
posted @ 2010-05-31 23:38
carekee
阅读(1345)
推荐(0)
摘要:
比如说有这样一个类的继承体系:类CDerivedA和CDerivedB都继承自类CBase。如果要写一个函数传入上面类中的一个对象的引用,在函数里面我们要根据对象的类型来进行相应的处理,也就是说对不同类型的对象进行不同的处理。在这种情况下我们就需要类的对象中保存有类型信息。下面就用一个简单的例子来说明怎么让自己编写的类有类型信息。 首先,根据类的继承关系创建类型信息tag:struct lx_Ba...
阅读全文
posted @ 2010-05-31 23:37
carekee
阅读(281)
推荐(0)
摘要:
引子 如果让你用C++写一个实用的字符串类,我想下面的方案是很多人最先想到的:class ClxString{public: ClxString(); ClxString(const char *pszStr); ClxString(const ClxString &str); ClxString& operator=(const ClxString &str); ~Clx...
阅读全文
posted @ 2010-05-31 23:36
carekee
阅读(419)
推荐(0)
摘要:
比如我们有下面的类:class ClxECS{public: int DoSomething() { // 这里以输出一句话来代替具体的操作 cout << "Output from method DoSomething!" << endl; return 0; };}; 和下面的一个vector:vector<ClxECS*> vECS;for (int i ...
阅读全文
posted @ 2010-05-31 23:35
carekee
阅读(400)
推荐(0)
摘要:
对于如下的类:class ClxECS{public: double Test(double dValue) { return dValue * 13; };private: int Test(int iValue) { return iValue * 13; };}; 下面的函数输出是什么?void ECS_test(){ int iValue = 13; ClxECS lx; cout <...
阅读全文
posted @ 2010-05-31 23:34
carekee
阅读(288)
推荐(0)
摘要:
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数...
阅读全文
posted @ 2010-05-31 23:34
carekee
阅读(170)
推荐(0)
摘要:
我们知道,类的私有成员在类的外部是不能被访问的。 例如有下面的这个简单的类:class ClxECS{private: int iPrivate;}; 那么下面的这个函数是不能通过编译的:void ECS_test(){ ClxECS lx; lx.iPrivate = 13; cout << lx.iPrivate << endl;} 但是,我们并不是没有办法来访问类的...
阅读全文
posted @ 2010-05-31 23:33
carekee
阅读(929)
推荐(0)