首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 学院论坛
精选专题 | 精美壁纸 | 专家答疑 | Flash剧场 | Photoshop | 名词解释 | 梦幻桌面 | PS高手进阶 | QQ区 | 图书 | 黑客教材
Flash教程| 卡通制作 | AutoCAD | 3DMax实例 | PS视频教程| 网页制作 | CorelDRAW| Firework | 滤镜与实例 | 全部视频教程
当前位置:eNet硅谷动力 > 学院频道 > VC

用ATL和MFC来创建ActiveX控件
2004-08-09 14:54 作者:George Shepherd 来源:eNet论坛
【简 介】
目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发。MFC代表了创建独立的Windows应用的一种简单、一致的方法;ATL提供了一种框架来实现创建COM客户机和服务器所必须的样板文件代码。这两种框架在它们对于开发ActiveX的用途上会合了。我们将看看这两种框架是如何适用于创建ActiveX控件的——突出其优缺点,亲自经历创建一个控件的过程——以便你能够决定何时使用一种框架,何时使用另一种。
    
加入收藏  设为首页

连接和事件

最后要进行的比较是MFC和ATL各是怎样处理连接点和事件集的。为了管理连接点和事件集,需要一个COM类来实现IconnectionPointContainer,然后创建一种提供指向IconnectionPoint的指针给客户的方法。MFC的主控件类,ColeControl,已经有了内置的IconnectionPointContainer,MFC通过连接映射提供了连接点。MFC已经为IPropertyNotifySink定义了连接点和控件的缺省事件集。

为了完善一个基于MFC的控件的缺省事件集,你只要简单的使用ClassWizard’s ActiveX Event tab。在你使用ClassWizard添加事件的时候,Visual Studio更新你的控件的.ODL文件,为潜在的包容器描述外出事件。另外,Visual Studio添加一个函数到你的类中,你可以调用它反过来向包容器激发事件。图9演示了基于MFC的控件的事件触发机制。基于MFC的控件的事件触发函数只是由包容器在它和控件建立连接点时提供的一个Idispatch指针的一些简单的包裹器。

在基于ATL的控件中建立事件则有所不同。在基于ATL的控件中,你从定义控件的.IDL文件中的事件开始。接着你建立了类型库的编译工程文件。图10显示了在IDL中描述的基于ATL的控件的事件集。

一但类型库编译通过,你就可以通过在类视中选择控件的类,在类上右击,然后选择Implement Connection Point,让类视来为你创建一个回调代理了。Visual Studio弹出一个对话框,列出控件类型库中所有可访问的事件接口。你选择那些你希望回调代理做的,Visual Studio就为你写一个代理。图11显示了基于ATL的消息流控制的回调代理。Visual Studio产生的回调代理代表了一个C++友好的函数集,被客户实现的接口所调用。

MFC的IconnectionPointContainer实现是硬分布到ColeControl中,并且每个连接点是由一个连接映射处理的,而ATL的实现是用多重继承处理的。你的控件类继承IconnectionPointContainerImpl和类视生成的代理。如果你开始一个工程的时候,选择了"Supports connection points",ObjectWizard就为你添加IconnectionPointContainerImpl。如果你忘了标记检查框,你可以写进去。此代码显示了连接点机制是怎样加入一个控件中的。类ATL_NO_VTABLE CATLMsgTrafficCtl :

{

amp;#8226;amp;#8226;amp;#8226;

public IConnectionPointContainerImpl,

public CProxy_DATLMsgTrafficEvents

amp;#8226;amp;#8226;amp;#8226;

{

LRESULT OnTimer(UINT msg, WPARAM wParam,

LPARAM lParam,

BOOLamp; bHandled) {

//amp;#8226;amp;#8226;amp;#8226;

if(nMessagesToShow > m_threshold)

{

Fire_ExceededThreshold(nMessagesToShow, m_threshold);

}

//amp;#8226;amp;#8226;amp;#8226;

}

};

作为一个应用框架ATL和MFC的比较

最近,许多开发者开始对使用ATL作为框架来开发应用和控件感兴趣了。当然,MFC已经使用了很长时间了,是一个能够开发可双击的基于Windows的应用的非常成熟的框架。例如,MFC包括了这样的特性作为一个总体文档/视体系结构:Object Linking 和 Embedding支持, 以及工具条和状态栏。

然而,所有这些功能都是有代价的。一些更加普遍的抱怨是MFC的比较深的足迹(无论是在DLL中,或是在静态连接的版本中),以及自身的某种相互依存性。例如,买入MFC的一种特性意味着买入MFC的对象连接和嵌入,这意味着买入MFC的文档/视结构。另一方面,ATL是一个原始的框架,没有任何应用框架goodies。

正象你已经看到的,两个框架都提供创建控件的可行途径。然而,两者都各有千秋,也各有弊病。用MFC编写控件通常更加容易——尤其是如果你不是在开发COM集中的应用并且你需要windowing和drawing支持。ATL的体系架构更加靠近COM的核心,你还会经常发现自己在编写很多的SDK类型的代码——就是说,你在回过头来用window和设备上下文句柄。ATL为更广范围的控件类型提供了很大的支持,象复合控件,基于HTML的控件,没有design-time接口的轻量级的控件等等。MFC仅提供完全成熟的控件。

对ATL进行分支的实现是非常直接的。例如,增加一个接口通常是一件添加接口到继承表,在COM映射中添加一个入口然后实现接口函数的工作。分支MFC的实现通常是一种折磨。例如,添加一个接口到基于MFC的控件意味着处理所有那些接口映射宏。

最后,ATL提供了大量的调试支持,包括接口引用计数以及QueryInterface调试支持,这在MFC中是没有的。

这两种体系架构的区别是非常明显的。通常,MFC使得你很快完成你的工程并更快的运行起来,但是牺牲了灵活性。ATL没有那样快,那样容易使用,但是它是COM友好的。而且,好像随着ATL的成熟,它将会越来越容易使用。




上一页[1] [2] [3] [4] [5] [6] [7] [8]
关键字: ActiveX 
您对这篇文章的看法是:    喜欢 反感 支持 反对 加油 鄙视 学习 打击 佩服 漂亮 路过 发表评论
视频教程】 【专题汇总】 【不懂就问我关闭窗口
利用无线路由器建立FTP服务器
Win8家庭安全 轻松管理儿童上网
网易做手机?丁磊搅局手机市场?
最有个性的英文QQ情侣网名
Photoshop打造炫丽的美女魔法照片
 本栏目最新文章
·VC各类之间的调用函数总结
·VC中特殊字体的实现方法讲解
·VC++中进程与多进程管理的方法
·用VC 6.0实现串行通信的三种方法
·VC++实现回收站的文件存取
 精彩回放
· 用Ps打造文字木头材质特效
· 用Ps给小木偶增加伤感色彩
· 用ps制作漂亮的创意时钟
· 用Ps打造新锐美女梦幻海报
· Ps调出草地儿童照片梦幻色
· Ps制作一颗漂亮的红色樱桃
· Ps打造逸长发少女音乐主题
· 用Ps打造美女舞者炫丽插画
 今日软件下载
杀毒软件免费随便用
瑞星全功能安全软件2009 基于“云安全”策略和“智能主动防御”技术开发.
www.rising.com.cn
 往日推荐
·广州车展:人气车模排行榜
·青春洋溢:“海藻”私密写真
·Photoshop 最简易磨皮方法

论坛精华
·操盘手主力版免费 选股更精准
·酷6K歌 与美女一起在线视频K歌
·找寻同城有缘人 在线万人同K歌
·美图秀秀图像处理工具最新版
·瑞星全功能安全软件2011下载
·愤怒的小鸟 绿色中文版 下载
热点推荐
打造梦幻美女
鼠绘古装美女
调出美女色调
Photoshop教程
热点关注
·Firework CS5 视频教程
·一个月,成就电脑高手之路
·《从实例学VC》视频教程
·2D游戏原画设计视频教程
·ASP.NET编程技巧范例大全
·Java软件开发高级视频教程
·C++从新手到高手视频教程
·C#语言基础视频教程
·Vray高级实例应用视频教程
往日推荐
练成C++高手
获奖3D图赏
ASP项目实战
PS发黄老照片
焦点关注
风尚视觉