引言 1
第一章 COM简介 1
1-1 什么是COM? 1
1-2 COM是怎样产生的? 2
1-3 为什么需要COM? 3
1-4 COM工作机制 5
1-4-1 COM服务器 6
1-4-2 COM ClassFactory 6
1-4-3 COM接口 6
1-4-4 COM参考计数 6
1-4-5 Windows的COM系统 7
1-4-6 COM客户 7
1-5 静态COM,动态Automation 7
1-6 Automation使COM向计算机界开放 8
1-7 从Automation到OCX、ActiveX 9
1-8 ActiveX 控件是带用户接口的Automation服务器 11
1-9 Stock属性和使ActiveX控件行为标准化的属性页 12
1-10 连接点允许事件从ActiveX控件发送到容器 13
1-11 Persistence允许ActiveX控件随时存贮它们的状态 14
1-12 下一步工作 15
第二章 ATL简介 16
2-1 Visual C++中的ATL 16
2-1-1 老版本Visual C++的ATL 16
2-1-2 ATL的在线文档 17
2-2 用ATL AppWizard生成ATL项目 18
2-2-1 New对话框 18
2-2-2 ATL AppWizard 18
2-2-3 确认对话框 19
2-3 应用ATL对象向导添加COM接口 20
2-3-1 对象向导对象 20
2-3-2 对象向导控件 20
2-3-3 对象向导Miscellaneous元素 21
2-3-4 对象向导Data Access元素 21
2-3-5 对象向导名标签(Object Wizard Name Tab) 22
2-3-6 对象向导属性标签(Object Wizard Attributes Tab) 22
2-3-7 其它对象向导标签 23
2-4 使用ATL Interface Wizards生成函数和属性 23
2-4-1 Class View Shortcut Menu 23
2-4-2 添加方法对话框(Add Method Dialog) 24
2-4-3 添加属性对话框(Add Property Dialog) 25
2-4-4 编辑属性对话框(Edit Attributes Dialog) 25
2-5 ATL项目的优先方题 26
2-5-1 代理生成器 26
2-5-2 高级服务器 26
2-5-3 OLE DB Providers 26
2-6 ATL代码(模板和宏) 27
2-6-1 模板用标准C++代码生成常见类 27
2-6-2 宏展开为常用代码 27
2-7 ATL3.0版本的新变化 27
2-7-1 3.0版本对AppWizard的改变 27
2-7-2 3.0版本对ATL ObjectWiard的改变 28
2-7-3 3.0版本对ClassView Context Menus的改变 31
2-7-4 增加窗口消息手柄选项 31
2-7-5 实施连接点选项(Implement Connection Point) 32
2-7-6 执行接口选项(Implement Interface) 33
2-8 下一步的工作 34
第三章 创造COM服务器 35
3-1 为什么要编写COM服务器? 35
3-1-1 COM服务器与DLL的对比 35
3-1-2 如今COM服务器无处不在 36
3-2 COM服务器如何工作 36
3-2-1 服务器本身 36
3-2-2 接口和它的函数 38
3-2-3 ClassFactory 38
3-2-4 参数而非属性 39
3-2-5 GUIDs和HRESULTs 39
3-3 服务器内部的服务器 40
3-3-1 接口继承问题 40
3-3-2 包含是简单的方法 41
3-3-3 复杂但高效的集合 41
3-3-4 ATL对包含和集合都提供支持 42
3-5 ATL服务器类型 42
3-5-1 DLL服务器 42
3-5-2 EXE服务器 43
3-6 ATL对象类型 43
3-6-1 简单对象 43
3-6-2 IE(Internet Explorer)对象 43
3-6-3 特殊对象 44
3-7 创建可集合简单COM服务器EXE 44
3-7-1 按步解释 44
3-7-2 按行说明 48
3-8 创建一个非集合简单COM服务器EXE 50
3-8-1 按步解释 50
3-8-2 按行说明 54
3-9 创建一个包含IE(Internet Explorer)的COM的服务器 57
3-9-1 按步解释 57
3-9-2 按行说明 63
3-10 创建一个集合IE COM服务器 77
3-10-1 按步解释 77
3-10-2 按行说明 82
3-11 下一步的工作 96
第四章 建立COM客户 97
4-1 COM系统 97
4-1-1 CoInitialize 97
4-1-2 CoCreateinstance 97
4-1-3 CoUninitialize 97
4-2 C++ COM客户 98
4-2-1 启动和停止COM系统 98
4-2-2 用头文件使用接口指针 98
4-2-3 用智能指针使用接口指针 98
4-3 非C++ COM客户 99
4-3-1 像接口指针一样生成COM服务器对象 99
4-3-2 接口函数调用 99
4-3-3 错误处理 100
4-4 ATL COM客户 100
4-4-1 把EXE服务器变成EXE客户 100
4-4-2 修改tWinMain 100
4-4-3 在ATL项目中使用对话框 100
4-5 FrontPage Express COM客户 101
4-5-1 FrontPage Express随IE4.0免费提供 101
4-5-2 把FPE的ActiveX Wizard用于COM服务器 101
4-5-3 用FPE编写VBScirpt代码 101
4-6 在ATL中用智能指针创建COM客户 102
4-6-1 按步解释 102
4-6-2 按行说明 104
4-6-3 按步解释 109
4-7 用FPE在HTML中建立一个COM客户 110
4-7-1 按行说明 110
4-7-2 按步解释 112
4-8 下一步工作 113
第五章 开发Automation服务器 114
5-1 Automation做些什么 114
5-1-1 C++专有的COM俱乐部 114
5-1-2 对接口的早捆绑与晚捆绑的比较 115
5-1-3 现在每一个人都可以使用动态函数 115
5-2 Automation是如何工作的? 115
5-2-1 Dispinterfaces和Interfaces的比较 116
5-2-2 双接口具备两者的优点 116
5-2-3 IDispatch是Automation的核心 116
5-2-4 GetlDsOfNames容许晚捆绑 117
5-2-5 Invoke使Automation发生 117
5-3 属性为Automation服务器提供数据储存 118
5-3-1 属性和方法与函数的比较 118
5-3-2 用户提供储存器,Automation提供方法 118
5-3-3 Automation数据类型 118
5-3-4 与类型库同时连接 119
5-4 ATL通过缺省值建立Automation服务器 119
5-4-1 双接口是缺省设置 119
5-4-2 手工建立Dispinterfaces 119
5-4-3 ATL自动建立TLB文件 120
5-5 Automation客户需要ATL代理生成器 120
5-5-1 智能指针需要帮助 120
5-5-2 ATL代理生成器与问题的解决 120
5-6 在ATL中建立一个Dispinterface Automation服务器 120
5-6-1 按步解释 121
5-6-2 按行说明 127
5-7 在ATL中建立一个双接口Automation服务器 142
5-7-1 按步解释 142
5-7-2 按行说明 148
5-8 用智能指针建立Automation客户 161
5-8-1 按步解释 161
5-8-2 ATL3.0不再支持代理生成器 165
5-8-3 按行说明 166
5-9 在ATL中用静态调用建立Automation客户 173
5-9-1 按步解释 173
5-9-2 按步说明 176
5-9-3 按步解释 180
5-10 用FPE 在HTML中建立一个Automation客户 180
5-10-1 按行说明 181
5-10-2 按步解释 183
5-11 下一步工作 184
第六章 创建Internet Explorer ActiveX控件 185
6-1 ActiveX控件为Automation服务器提供用户接口 185
6-1-1 复合文件是COM用户接口 185
6-1-2 VBX控件疾风暴雨似地占领了市场 186
6-1-3 OCX控件通过Java变成了ActiveX控件 186
6-2 ATL支持轻量级的IE ActiveX控件对象 186
6-2-1 IE控件与Full控件的比较 186
6-2-2 确实只有你的浏览器知道 187
6-3 ActiveX控件在ATL中有许多选项 187
6-3-1 透明和实心控件描绘形式 187
6-3-2 运行时的不可见性 187
6-3-3 Input Focus处理选项 187
6-3-4 WINDOWS 控件子类选项 187
6-3-5 绘图优化 187
6-3-6 OLE支持 188
6-3-7 Windowless与Windowed的比较 188
6-4 用ATL建立一个加密和解密IE/Lite控件 188
6-4-1 按步解释 188
6-4-2 按行说明 194
6-5 用ATL建立一个透明的IE控件标签 209
6-5-1 按步解释 209
6-5-2 按行说明 212
6-6 用ATL建立Edit IE控件 213
6-6-1 按步解释 213
6-7 用ATL3建立一个Lite Composite控件 216
6-7-1 按步解释 216
6-7-2 按行说明 220
6-8 在HTML中用ActiveX控件台建立ActiveX控件客户 224
6-8-1 按步解释 224
6-9 下一步的工作 230
第七章 创建Full ActiveX控件 231
7-1 全控件具有但IE控件不具有的属性 231
7-1-1 快速激活 231
7-1-2 嵌入对象和类型信息 231
7-1-3 持久性 232
7-1-4 属性页 232
7-2 ActiveX控件支持固化的和外部的属性和方法 232
7-2-1 ActiveX控件需要一致性的外观和感觉 232
7-2-2 固化属性使ActiveX控件的属性和方法标准化 233
7-2-3 外部属性使ActiveX控件更加适用 234
7-3 利用持久性保存ActiveX控件的状态 234
7-3-1 状态信息需要以统一的方式保存 235
7-3-2 复合文档技术过于复杂 235
7-3-3 持久性是ActiveX寻找的答案 236
7-4 基于存储的持久性 236
7-4-1 “存储仓”类似于文件夹 236
7-4-2 “流”类似于文件 236
7-5 基于属性包的持久性 237
7-5-1 属性包由容器执行 237
7-5-2 属性包形式自由 237
7-6 WORD使用基于存储的持久性 237
7-6-1 如果一个ActiveX控件是可插入的,Word就可支持其数据 238
7-7 ActiveX Control Pad中使用基于属性包的持久性 238
7-7-1 HTML使用<PARAM>标签支持属性包 238
7-8 ATL Full ActiveX控件的绘制问题 238
7-8-1 窗口的有无 238
7-8-2 规则化设备上下文 239
7-9 Full ActiveX控件的尺寸问题 239
7-9-1 ActiveX控件改变大小的方式 239
7-9-2 ATL对大小改变的支持 239
7-10 使用ATL创建Panel全控件 240
7-10-1 按步解释 240
7-10-2 按行说明 246
7-11 使用ActiveX Control Pad在HTML中测试ATLPanel控件 255
7-11-1 按步解释 255
7-11-2 按行说明 255
7-11-3 按步解释 256
7-12 下一步的工作 257
第八章ActiveX控件的属性页 258
8-1 什么是属性页? 258
8-1-1 属性页是ActiveX控件属性的用户接口 258
8-1-2 在开发环境中使用属性页 259
8-1-3 属性页需要持久性的支持来保存它们的数据 259
8-2 属性页是如何工作的 259
8-2-1 属性页使用COM接口 259
8-2-2 属性页创建一个特殊的对话框资源 260
8-2-3 容器提供标签对话框和按钮 260
8-3 在ATL中执行属性页 260
8-3-1 属性页ATL对象 260
8-3-2 编辑对话框资源 260
8-3-3 使用代码完成连接 261
8-4 固化属性页 261
8-4-1 某些属性具有自动的属性页支持 261
8-4-2 你不动手ATL也为你添加代码事件 261
8-5 使用ATL为Panel控件添加属性页支持 262
8-5-1 按步解释 262
8-5-2 按行说明 264
8-5-3 ATL3.0和Visual C++6及对象向导 270
8-6 使用ActiveX Control Test Container测试Panel的属性页 270
8-6-1 按步解释 270
8-7 下一步的工作 272
第九章ActiveX控件的事件 273
9-1 事件是应用程序之间的通告 273
9-1-1 用户输入需要通告 273
9-1-2 状态改变需要通告 273
9-1-3 Windows的方式是使用回调函数 273
9-2 Windows事件就是消息 274
9-2-1 Windows消息的体系结构 274
9-2-2 消息泵 274
9-2-3 Windows事件管理 274
9-3 ActiveX事件采用接口处理 275
9-3-1 连接问题 275
9-3-2 接口是解决方案 275
9-3-3 一个关于地形(topography)的新问题 275
9-4 IConnectionPoint接口 275
9-4-1 从控件角度来看IConnectionPoint是如何工作的 275
9-4-2 从容器角度来看IConnectionPoint是如何工作的 276
9-5 IConnectionPointContainer接口 276
9-5-1 从控件角度来看IConnectionPointContainer是如何工作的 276
9-5-2 从容器角度来看IConnectionPointContainer是如何工作的 277
9-6 ATL如何支持Windwos事件 277
9-6-1 消息映射 277
9-6-2 事件管理 277
9-7 ATL如何支持ActiveX事件 278
9-7-1 连接点映射(Connection Point Maps) 278
9-7-2 IDL 278
9-7-3 使用代理生成器需要一个TLB文件 278
9-7-4 代理类被引入到控件文件需要的地方 278
9-8 为ATLPanel控件项目添加事件支持 278
9-8-1 按行说明 279
9-8-2 按步解释 290
9-8-3 按行说明 293
9-9 用Active Control Pad在HTML中测试ATLPanel控件的事件 302
9-9-1 按行说明 303
9-9-2 按步解释 304
9-10 ATL3.0的Connection Point Wizard 304
9-11 下一步的工作 305
关于光盘 306