利用MFC的Application Wizard我们可以方便的创建一个工程,首先在工程类型中选择MFC ActiveX Control,然后选择在工程中创建多少个控件。在接下来的对话框中并且为每个控件输入相关信息,通过Edit Name按钮可以为控件指定名称,通过Advanced按钮可以为控件指定各种附加特性,此外你还可以将控件指定为一个继承了某种现有窗口类的子类。在本节的例子中我们创建三个控件,分别是:
- 普通窗口控件 CSam_windowCtrl
- 无窗口控件 CSam_nowindowCtrl
- EDIT窗口控件 CSam_editwindowCtrl
aspectratio="t">
vc/images/10811/sp_teach_221.gif" src="./0002.files/image001.png">
在工程创建完毕后你就可以编译并测试控件了,但是这时候的控件还不能做任何事情。我们需要为控件添加方法和属性。简单的讲,方法就相当与类中的函数调用,而属性就相当与类中的成员变量。
假设在普通窗口控件中我们将显示一份学生资料,包括姓名,出生年月,班级名称,为了能够设置这些数据,我们为控件添加一个方法。选择Class Wizard,并选中对话框中的Automation页,按下Add Method按钮以添加消息,然后在弹出的对话框中输入相关信息。我们为新添加的方法取名为SetMertial,同时指定三个参数LPCTSTR pszName,LPCTSTR pszBirth,LPCTSTR pszClass,返回值设置为void,在保存后Class Wizard会生成一个函数,该函数的名称就是你所指定的方法名称。此外我们还添加一个属性用于让用户设置显示文字的颜色。在添加属性对话框中为属性取名为TextColor,并且接收的参数为OLE_COLOR,并且将实现方法设定为Get/Set Methods。在保存后Class Wizard会为你生成GetXXX/SetXXX两个函数XXX就代表你所指定的属性名,当控件容器更改属性时就通过这两个函数。
然后我们为CSam_windowCtrl添加三个成员变量保存这些学生资料和一个用于保存颜色,当然别忘了在构造函数中对它们初始化。然后修改和添加与方法和属性有关的函数,我们可以看到在数据被修改后都会调用Invalidate()使窗口重绘。
// 添加成员变量
class CSam_windowCtrl : public COleControl
{
DECLARE_DYNCREATE(CSam_windowCtrl)
// Constructor
public:
CSam_windowCtrl();
CString m_szName,m_szBirth,m_szClas