WEB开发网
开发学院软件开发VC 用ATL和MFC来创建ActiveX控件 阅读

用ATL和MFC来创建ActiveX控件

 2010-07-25 20:46:35 来源:WEB开发网   
核心提示:开发一个流入接口当开发一个基于MFC的ActiveX控件时,缺省的流入接口是一个分发接口,用ATL和MFC来创建ActiveX控件(7),Visual C++ 和 MFC使得开发一个流入分发接口变得十分简单——只需使用ClassWizard来生成方法和属性,每次你使用ClassWizard添加一

开发一个流入接口

当开发一个基于MFC的ActiveX控件时,缺省的流入接口是一个分发接口。Visual C++ 和 MFC使得开发一个流入分发接口变得十分简单——只需使用ClassWizard来生成方法和属性。每次你使用ClassWizard添加一个新的属性或方法,它就插入一个入口到你的控件的分发映射中。MFC使用分发映射来满足客户的调用请求。

MFC的缺点是在你的控件中增加一个常规的COM接口是一个枯燥无味的过程。此过程包括使用MFC的COM宏来建立实现接口的嵌套的类。

当为你的基于ATL的COM控件开发主流入接口时,类视是添加属性和方法的最好的手段。一当你为控件生成了代码,ATL ObjectWizard即添加一个缺省的流入接口。这可以是一个双端接口,也可以是一个常规的自定义接口,取决于你先前设定的工程选项。

Visual Studio的类视向你显示了你的工程中包含的所有的类和接口,在类视中右击一个接口的定义时,即可添加一个属性或者方法。使用类视来定义接口非常方便,因为每次你添加一个方法或者属性的时候,类视都会更新IDL,类源代码以及头文件。

不象MFC,给控件添加一个常规COM接口是非常容易的。在ATL中,你只要简单的添加新的接口样板文件连接(goo)(一个GUID,关键字对象和关键字接口)。类视将会显示新的接口,你可以继续添加新的成员。

添加属性

一个ActiveX控件经常包含属性,它们是描述控件的状态的成员变量。给一个基于MFC的控件添加属性的最好的手段是利用ClassWizard。ClassWizard的自动为你添加成员变量,将它们映射到缺省的分发接口。ClassWizard给你提供了两种选择:你可以添加一个成员变量,包括一个变化通告函数,或者你可以添加一对Get/Set函数,手动的添加成员变量。除了给控件添加你自己的定制属性,ClassWizard使你象添加背景和标题一样的添加库存。ClassWizard甚至自动为你的类添加一个成员变量。

为一个基于ATL的控件添加属性有一点不同,你为控件中的每个属性添加单独的存取程序和变异因子函数(propget 和 propput函数)。然而,类视只是定义了接口函数。你还要手工添加数据成员到类中,然后简单的实现这些函数。

基于ATL的控件还支持stock属性,ATL ControlWizard预先要求你确定希望哪些stock属性包括在你的控件中。添加至少一个stock属性到控件中使得控件继承自ATL的CstockPropImpl类。CstockPropImpl是Idispatch的一个实现,优化来显示ActiveX控件的stock属性,为每个标准的stock属性包含了兼容Idispatch的get 和 put函数。

ControlWizard还给控件添加代表stock属性的数据成员,例如,如果你添加了背景颜色的stock属性,ControlWizard添加一个名为m_clrBackColor的数据成员到你的类中。CstockPropImple一次性的为所有标准的stock属性的get 和 put函数添加实现。所有这些函数期望在你的类中看到合适的成员变量(象对应背景颜色的m_clrBackColor)。

编译器将在stock属性没有包括的那些get和put函数上阻塞。实现过程希望在你的类中看到成员变量。为了消除编译器错误,CcomControlBase添加了一个联合结构,它包括了stock的get 和 put函数希望看到的所有成员的名字。然而,给控件添加数据成员重载了联合类型中的名字,CstopPropImpl类在它的get 和 put函数中使用控件的成员变量

如果你忘记了使用ControlWizard预先添加stock属性,你总可以手工添加相关代码——即,从CstockPropImpl继承,然后为你想要显示的属性添加成员变量。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:ATL MFC 创建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接