ATL 基本介绍

ATL 活动模板库,一系列的基于模板的C++ 类,使得开发COM 对象更加方便,它特别支持了关键的COM 功能,包括库存实现,,双接口,标准COM 枚举器接口,连接点,和ActiveX 控件。

如果进行大量的ATL 编程,将有需要了解有关属性的更多信息,这是Visual C++.NET 中旨在简化COM 编程的新功能。

ATL 致力于简化创建高效、灵活、轻量的控件的过程。下面示例演示ActiveX 控件的创建,演示许多ATL 和COM 基础知识。

1. 默认生成项目(这里生成的是进程内DLL)

文件列表及功能如下:

文件 描述
Polygon.cpp 包含DllMain、DllCanUnloadNow、DllGetClassObject、DllRegisterServer和DllUnregisterServer 的实现。以及一个对象map,是你的项目里的ATL 对象的列表。这里最初是空白的
Polygon.def 模块定义文件,给链接器提供了DLL 导出所需要的信息
Polygon.idl IDL 文件,描述了你的对象的接口
Polygon.rgs 注册表脚本,包含了注册你的程序的DLL 的信息
Polygon.rc 资源文件,初始时包含版本信息,以及项目名的字符串
Resource.h 资源文件的头文件
Polygonps.def 跨套间调用需要的代理和存根所需要的模块定义文件
stdafx.cpp 将包含ATL 实现文件
stdafx.h 包含ATL 模

2. 添加ATL 控件

ATL 控件向导中包含的名称及含义如下:

成员 内容
short name 为控件起的名字
Class c++ 类名,用来实现该控件
.h 文件 包含C++ 类的定义
.cpp C++ 类的实现
CoClass 这个控件的组件类
Interface 接口的名字,控件将实现它的定制方法和属性
Type 控件的描述
ProgID 可读的可以用来查找控件的CLSID 的名字

支持丰富的错误信息和连接点

输入了控件名之后,不要点击确定,做一些属性的小修改:点击选项,选择,连接点:这将为IDL 文件中的传出接口创建支持。也可以添加接口,以扩展控件的功能。

扩展控件的功能

点击接口,添加IProvideClassInfo2和ISpecifyPropertyPages接口

使控件可插入

外观->可插入选择框

添加填充色属性

属性-->添加Fill Color属性

添加的文件和描述如下

文件 描述
PolyCtl.h 包含CPolyCtl C++类的大部分实现
PolyCtl.cpp CPolyCtl 的剩下的部分
PolyCtl.rgs 用来注册控件的注册表脚本
PolyCtl.htm 一个web 页面,包含对新创建的控件的引用

向导将做如下代码改变:

1. 在stdafx.h和stdafx.cpp文件中添加了#include语句,以包含支持控件所需的ATL文件。

2. 更改了Polygon.idl以包含新控件的详细信息。

3. 将新控件添加到Polygon.cpp中的对象映射。

给控件添加属性

这里有一点需要注意,它的向导,和实际有一些出入:

public CComControl<CPolyCtl>,
 public IProvideClassInfo2Impl<&CLSID_PolyCtl, &DIID__IPolyCtlEvents, &LIBID_PolygonLib>

这个代码并不需要添加

添加事件:

_IPolyCtrlEvents_CP.h 没有public 属性,得自己添加public 关键字

最后的那个浏览器加载的实验,需要 使用ie 浏览器。

猜你喜欢

转载自blog.csdn.net/qq_18218335/article/details/84349675
今日推荐