深入解析ATL(第二版ATL8
13节) 1
11 容纳控件 1
1 容纳控件 利用 ATL 所支持的控件容纳,可实现容纳控件
比如, CAxDialogImpl 中的 Ax 两字就表示 ActiveX 控件,表示对话框具有容纳控件的能力
在对话框中实现容纳控件,只需在对话框资源上点击右键,从弹出菜单选择 Insert ActiveX Control ,然后弹出一个对话框,列举了系统安装的所有控件,如图 1-17 所示
图 1-17 插入 ActiveX 控件对话框 插入控件后,点击控件可以在控件的属性窗口设置控件的属性
如图 1-18 所示
图 1-18 控件属性对话框 在属性对话框的工具栏上点击控件事件按钮,还可以选择处理控件的事件,如图 1-19 所示
图 1-19 选择处理的控件事件 容纳对话框运行显示时,控件被创建,同时根据开发阶段设置的属性初始化控件
图 1-20 显示了容纳了一个控件的对话框
图 1-20 容纳 COM 控件的对话框 ATL 不但提供了对话框的容纳控件功能,其他窗口也同样支持:声明为对话框资源的 UI 控件(称为复合控件);声明为 HTML 资源的 UI 控件(称为 HTML 控件)
关于控件容器的更多信息请参考第十二章“控件容器”
2 C++ COM 客户端 至少在理论上, COM 与 C++ 是一致的
一个 COM 接口直接映射为一个 C++ 的抽象类
使用 COM 对象,仅仅需要使用 MIDL 编译器运行 IDL 文件,就可以生成一个头文件,里面包含有所有需要的信息
所有的这一切都运行正常,直到 VB 团队询问他们也是否可以使用 COM 技术
VB 开发人员通常不知道,也不想知道 C++ 语言
IDL 也是一个与 C++ 传统语言相似的语言,其中也支持许多 C/C++ 的特性(比如数组和