第1章 ActiveX概述 1
1.1 ActiveX的发展历史 1
1.2 ActiveX、OLE和Internet 2
1.3 ActiveX组件的类型 3
1.3.1 ActiveX服务器 3
1.3.1.1 什么是ActiveX服务器 3
1.3.1.2 ActiveX服务器的分类 3
1.3.2 ActiveX容器 4
1.3.2.1 什么是ActiveX容器 4
1.3.2.2 ActiveX容器/服务器 4
1.3.3 ActiveX自动化服务器 4
1.3.3.1 什么是ActiveX自动化 4
1.3.3.2 ActiveX自动化服务器的分类 5
1.3.4 ActiveX自动化控制器 6
1.3.5 ActiveX控件 6
1.3.5.1 什么是ActiveX控件 6
1.3.5.2 ActiveX控件发展的历史 6
1.3.6 COM组件 7
1.4 选择和实现ActiveX组件的策略 7
1.4.1 ActiveX自动化服务器和控制器 7
1.4.2 ActiveX控件 8
1.4.3 COM对象 8
1.5 小结 9
第2章 开发ActiveX的工具 11
2.1 选择合适的开发工具 11
2.1.1 Microsoft基础类库(MFC) 11
2.1.2 Active模板库(ATL) 12
2.1.3 BaseControl框架(BaseCtl) 12
2.1.4 建立自己的框架 13
2.1.5 开发工具小结 13
2.2 注册表和注册表编辑器 13
2.2.1 注册表发展的历史 14
2.2.1.1 统一记录在SYSTEM.INI和WIN.INI中 14
2.2.1.2 记录在自己的INI文件中 14
2.2.1.3 记录在注册表中 14
2.2.2 注册表的结构 15
2.2.2.1 注册表的结构划分及相互关系 15
2.2.2.2 六大根键的作用 16
2.2.2.3 ActiveX组件信息在注册表中的位置 17
2.2.3 注册表编辑器的一些基本操作 17
2.2.3.1 查找 17
2.2.3.2 创建键和键值 18
2.3 开发ActiveX的一些实用工具 19
2.3.1 MIDL编译器 19
2.3.2 Mktypelib编译器 19
2.3.3 GUIDGEN 19
2.3.4 注册服务器 20
2.3.5 OLE/COM对象浏览器 21
2.3.6 如何将工具加到VC++的开发环境中 22
2.4 小结 22
第3章 ActiveX的基础——COM 23
3.1 COM概述 23
3.1.1 什么是COM 23
3.1.2 COM技术的发展历程 24
3.1.3 COM结构 25
3.1.3.1 对象与接口 25
3.1.3.2 客户/服务器模型 26
3.1.3.3 COM库 27
3.1.4 COM特性 27
3.1.4.1 语言无关性 27
3.1.4.2 进程透明特性 28
3.1.4.3 可重用性 29
3.1.5 COM对象的基本知识 29
3.1.5.1 COM对象的标识——CLSID 30
3.1.5.2 COM对象与C++对象的比较 31
3.1.6 COM接口的特点 32
3.1.6.1 二进制特性 32
3.1.6.2 接口不变性 33
3.1.6.3 继承性(扩展性) 33
3.1.6.4 多态性 33
3.2 COM与ActiveX相关的技术 34
3.2.1 可连接对象 34
3.2.2 结构化存储 34
3.2.3 命名与绑定技术 37
3.2.4 统一数据传输 39
3.2.4.1 数据交换与传输协议的分离 40
3.2.4.2 剪贴板和拖—放操作 41
3.3 小结 42
第4章 使用MFC开发ActiveX服务器 43
4.1 ActiveX服务器功能演示 43
4.1.1 单独运行程序 43
4.1.2 在注册表中登记 44
4.1.3 链接和嵌入对象 44
4.1.3.1 什么是链接和嵌入 44
4.1.3.2 嵌入对象 45
4.1.3.3 链接对象 46
4.1.4 在位编辑和开放编辑 46
4.1.4.1 在位编辑 46
4.1.4.2 开放编辑 47
4.1.5 使用剪贴板和拖—放操作 48
4.1.5.1 使用剪贴板 48
4.1.5.2 使用拖—放操作 48
4.2 实现一个最简单的ActiveX服务器 49
4.2.1 创建一个ActiveX服务器 49
4.2.2 程序结构分析 54
4.2.2.1 基本程序框架结构 54
4.2.2.2 应用程序类 54
4.2.2.3 主窗口类 55
4.2.2.4 子窗口类 55
4.2.2.5 文件类 55
4.2.2.6 视图类 56
4.2.2.7 在位框架类 56
4.2.2.8 服务器对象类 56
4.2.2.9 应用程序资源 57
4.2.3 编译运行 57
4.3 在应用程序类中初始化ActiveX服务器 59
4.4 在文件类中添加对服务器的支持 61
4.4.1 登记剪贴板格式 61
4.4.2 创建或编辑嵌入对象 62
4.4.3 查找链接项 63
4.4.4 设置在位编辑窗口矩形 64
4.5 实现服务器对象 65
4.5.1 绘制对象 66
4.5.1.1 在文件类中实现绘制 66
4.5.1.2 在服务器对象类中得到文件的指针 67
4.5.1.3 在服务器对象类中实现绘制 68
4.5.2 获得对象的大小 68
4.5.3 获取剪贴板对象 69
4.6 在视图类中实现在位编辑 71
4.6.1 设置绘图模式 72
4.6.2 实现绘制操作 72
4.7 在视图类中实现剪贴板操作 72
4.7.1 复制 72
4.7.2 剪切 75
4.7.3 粘贴 75
4.8 在视图类中实现拖—放操作 76
4.8.1 登记拖—放目标对象 76
4.8.2 添加成员变量记录拖—放类型 78
4.8.3 实现拖—放 79
4.8.3.1 处理鼠标左键消息 79
4.8.3.2 重载OnDragEnter函数 80
4.8.3.3 重载OnDragOver函数 80
4.8.3.4 重载OnDragLeave函数 81
4.8.3.5 重载OnDrop函数 81
4.9 小结 81
第5章 使用MFC开发ActiveX容器 83
5.1 概述 83
5.2 ActiveX容器功能演示 83
5.2.1 插入对象 83
5.2.2 支持链接和嵌入对象的在位编辑 85
5.2.3 剪贴板操作 85
5.2.4 编辑和更新链接 85
5.2.5 查看和修改对象的属性 86
5.2.5.1 转换对象的格式 87
5.2.5.2 改变对象大小 87
5.2.5.3 更改图标 88
5.2.5.4 编辑和更新链接 89
5.3 实现一个最简单的ActiveX容器 89
5.3.1 创建一个ActiveX容器 89
5.3.2 程序结构分析 93
5.3.2.1 基本程序框架结构 93
5.3.2.2 容器对象类 94
5.3.2.3 应用程序资源 94
5.3.3 编译运行 95
5.4 实现容器对象 95
5.4.1 记录对象的位置和大小 96
5.4.1.1 添加成员变量 96
5.4.1.2 得到对象的位置和大小 96
5.4.1.3 改变对象的位置 98
5.4.2 改变容器对象的状态 99
5.4.3 存取容器对象的数据 100
5.5 实现视图类 101
5.5.1 实现矩形跟踪器 101
5.5.1.1 什么是矩形跟踪器 101
5.5.1.2 实现矩形跟踪器 101
5.5.1.3 设置矩形跟踪器的鼠标形状 103
5.5.2 实现选中对象 104
5.5.2.1 实现命中测试 104
5.5.2.2 实现选中对象 105
5.5.3 绘制对象 107
5.5.4 插入一个新的对象 108
5.5.5 设置AxtiveX对象的输入焦点 110
5.5.6 改变对象的大小和位置 111
5.5.7 鼠标双击编辑 112
5.5.8 删除对象 113
5.6 剪贴板操作 113
5.6.1 复制和剪切AxtiveX对象 113
5.6.1.1 复制对象 113
5.6.1.2 剪切对象 114
5.6.2 粘贴AxtiveX对象 115
5.6.2.1 实现粘贴的基本函数 115
5.6.2.2 一般粘贴 118
5.6.2.3 粘贴链接 119
5.6.2.4 选择性粘贴 119
5.7 查看对象的属性 121
5.8 实现右键快捷菜单 123
5.9 小结 123
第6章 用MFC开发ActiveX 自动化服务器 125
6.1 创建ActiveX自动化服务器程序框架 125
6.1.1 创建工程 125
6.1.2 分析程序代码 127
6.1.2.1 应用程序类 127
6.1.2.2 用于AxtiveX自动化服务器注册的三个函数 128
6.1.2.3 ActiveX类型库 129
6.2 实现自动化服务器 130
6.2.1 添加AxtiveX自动化接口类 130
6.2.2 添加属性和方法 134
6.2.2.1 什么是属性和方法 134
6.2.2.2 添加属性 136
6.2.2.3 添加方法 141
6.2.3 注册自动化服务器 142
6.3 小结 142
第7章 用MFC开发AxtiveX自动化控制器 143
7.1 创建程序框架 143
7.1.1 创建工程 143
7.1.2 分析代码 146
7.2 实现AxtiveX自动化控制器 152
7.2.1 从类型库中引入类声明 152
7.2.2 添加自动化接口类的对象 155
7.2.3 向对话框中添加控件 156
7.2.4 实现控制功能 159
7.2.5 程序演示 159
7.3 小结 160
第8章 使用MFC开发ActiveX控件 161
8.1 ActiveX控件概述 161
8.1.1 ActiveX控件的一些基本概念 161
8.1.1.1 AxtiveX控件 161
8.1.1.2 AxtiveX控件容器 161
8.1.1.3 事件 161
8.1.1.4 方法 162
8.1.1.5 属性 163
8.1.1.6 串行化 164
8.1.1.7 属性页 164
8.1.1.8 许可 164
8.1.2 ActiveX控件的基本组成部分 164
8.1.2.1 基类COleControl 164
8.1.2.2 事件激发函数 164
8.1.2.3 派遣映射表 165
8.2 在VC++应用程序中使用AxtiveX控件 165
8.2.1 创建程序框架 165
8.2.2 插入AxtiveX控件 167
8.2.2.1 将AxtiveX控件插入到工程中 167
8.2.2.2 插入AxtiveX控件后的变化 168
8.2.3 实现功能 169
8.2.3.1 对话框布局设计 169
8.2.3.2 添加控件所对应的成员变量 171
8.2.3.3 实现具体的功能 172
8.2.4 程序演示 177
8.3 使用MFC开发AxtiveX控件 178
8.3.1 创建基本的程序框架 178
8.3.2 代码分析 181
8.3.2.1 程序结构 181
8.3.2.2 应用程序类 182
8.3.2.3 AxtiveX控件类 183
8.3.2.4 AxtiveX控件属性页类 186
8.3.3 修改控件的图标 188
8.3.4 创建属性 189
8.3.4.1 添加公共属性 189
8.3.4.2 添加具有通知特性的属性 191
8.3.4.3 添加Get/Set类型的属性 193
8.3.5 为控件添加特殊效果 195
8.3.5.1 添加FlashColor属性 195
8.3.5.2 添加FlashColor函数 197
8.3.5.3 实现命中测试 198
8.3.5.4 响应鼠标消息 199
8.3.6 添加事件 200
8.3.6.1 添加自定义事件 200
8.3.6.2 激发自定义事件 203
8.3.7 绘制控件 204
8.3.8 实现属性页 205
8.3.8.1 添加公共属性页 205
8.3.8.2 实现自定义属性页 205
8.3.9 测试控件 208
8.3.9.1 插入控件 208
8.3.9.2 测试事件 209
8.3.9.3 测试自定义属性 209
8.3.9.4 测试公共属性 210
8.4 小结 211
第9章 使用MFC开发AxtiveX文件 213
9.1 AxtiveX文件技术概述 213
9.2 使用MFC开发AxtiveX文件服务器 216
9.2.1 创建AxtiveX文件服务器项目 216
9.2.2 测试AxtiveX文件服务器 219
9.2.3 分析AxtiveX文件服务器程序 220
9.2.3.1 应用程序类结构 220
9.2.3.2 应用程序类 221
9.2.3.3 文件服务器类 223
9.2.3.4 在位编辑框架类 224
9.2.3.5 文件类 226
9.2.3.6 视图类 227
9.3 使用MFC开发AxtiveX文件容器 227
9.3.1 创建AxtiveX文件容器项目 227
9.3.2 测试AxtiveX文件容器 230
9.3.3 分析AxtiveX文件容器程序 232
9.3.3.1 应用程序类结构 232
9.3.3.2 文件对象类 233
9.3.3.3 视图类 234
9.4 小结 238
第10章 ActiveX模板库概述 239
10.1 概述 239
10.1.1 什么是ATL 239
10.1.2 ATL的发展历史 239
10.1.2.1 ATL的产生 239
10.1.2.2 ATL产生前的COM开发方式 240
10.1.3 ATL的优越性 241
10.1.3.1 针对性强 241
10.1.3.2 代码简练高效 241
10.1.3.3 技术先进 241
10.1.4 ATL的技术基础 241
10.1.4.1 COM技术 242
10.1.4.2 C++模板类技术 242
10.1.4.3 多继承技术 243
10.1.5 ATL的应用范围 243
10.2 ATL库简明参考 244
10.2.1 ATL简介 244
10.2.1.1 类工厂 245
10.2.1.2 COM模块 245
10.2.1.3 连接点 245
10.2.1.4 控件支持 245
10.2.1.5 数据类型 246
10.2.1.6 接口指针 246
10.2.1.7 IUnknown实现 246
10.2.1.8 持久性 247
10.2.1.9 属性和属性页 247
10.2.1.10 UI支持 247
10.2.1.11 窗口支持 248
10.2.2 常用ATL类介绍 248
10.2.2.1 CAxWindow 248
10.2.2.2 CComBSTR 249
10.2.2.3 CComClassFactory 250
10.2.2.4 CComCoClass 251
10.2.2.5 CComContainedObject 251
10.2.2.6 CComControl 252
10.2.2.7 CComDispatchDriver 254
10.2.2.8 CComModuleclass 255
10.2.2.9 CComObject 256
10.2.2.10 CComPtr 256
10.2.2.11 CComVariant 257
10.2.2.12 CContainedWindow 258
10.2.2.13 CMessageMapclass 259
10.2.2.14 CRegKey 259
10.2.2.15 CStockPropImpl 260
10.2.2.16 CWindow 261
10.2.3 常用ATL宏 266
10.2.3.1 COM映射宏 266
10.2.3.2 连接点宏 266
10.2.3.3 调试和错误信息报告宏 266
10.2.3.4 消息映射宏 266
10.2.3.5 对象映射宏 267
10.2.3.6 属性映射宏 268
10.2.3.7 固定属性宏 268
10.3 小结 268
第11章 使用ATL开发AxtiveX控件 269
11.1 开发普通AxtiveX控件 269
11.1.1 创建ATL项目 269
11.1.1.1 使用应用程序向导创建ATL框架 269
11.1.1.2 应用程序框架分析 272
11.1.2 向ATL项目添加AxtiveX控件 275
11.1.3 向AxtiveX控件添加属性 283
11.1.3.1 添加属性 283
11.1.3.2 实现属性 285
11.1.4 修改AxtiveX控件的绘制代码 286
11.1.4.1 计算正多边形的顶点 286
11.1.4.2 添加绘制代码 287
11.1.4.3 在改变边数时更新控件 289
11.1.5 为AxtiveX控件添加事件 290
11.1.5.1 添加响应事件的方法 290
11.1.5.2 添加连接点接口 291
11.1.5.3 添加激发事件的代码 293
11.1.6 给AxtiveX控件添加属性页 295
11.1.6.1 添加属性页对象 295
11.1.7 测试和发布AxtiveX控件 299
11.1.7.1 测试事件 299
11.1.7.2 测试属性 300
11.1.7.3 测试方法 301
11.2 开发基于Windows标准控件的AxtiveX控件 301
11.2.1 基于Windows标准控件的AxtiveX控件 301
11.2.2 创建ATL项目 302
11.2.3 添加基于标准控件的AxtiveX控件 303
11.2.3.1 添加控件 303
11.2.3.2 代码分析 304
11.2.4 实现控件 308
11.2.4.1 设置控件的风格 308
11.2.4.2 改变控件的绘制方法 309
11.2.4.3 改变控件的输入特性 310
11.2.5 测试控件 311
11.2.5.1 测试输入特性 311
11.2.5.2 测试属性 312
11.3 小结 313
第12章 使用ATL开发ActiveX自动化服务器 315
12.1 创建ATL项目 315
12.2 实现自动化服务器 316
12.2.1 添加ATL对象 316
12.2.1.1 使用ATL Object Wizard添加ATL对象 316
12.2.1.2 分析新添加的ATL对象 318
12.2.2 添加属性 320
12.2.2.1 使用ATL类向导添加属性 320
12.2.2.2 实现属性 322
12.2.3 添加方法 325
12.2.3.1 使用ATL类向导添加方法 325
12.2.3.2 实现方法 325
12.3 使用和测试自动化服务器 326
12.3.1 创建应用程序框架 326
12.3.2 添加表格对象 327
12.3.2.1 包含表格类的相关文件 327
12.3.2.2 在视图类中添加表格数据成员 331
12.3.3 生成设置对话框 332
12.3.4 通过交互生成表格 334
12.3.4.1 添加鼠标消息响应函数 334
12.3.4.2 实现交互代码 335
12.3.5 绘制表格 337
12.3.6 运行程序 338
12.4 小结 339