第1部分 ActiveX简介 1
第1章 什么是ActiveX 1
1.1 应用程序开发的Internet策略 1
1.2 ActiveX、OLE和Internet 1
1.3 ActiveX组件的类型 2
1.3.1 自动化服务器 2
1.3.2 自动化控制器 3
1.3.3 控件 3
1.3.4 COM对象 3
1.3.5 文档 4
1.3.6 容器 4
1.4 小结 4
第2章 ActiveX的功能 5
2.1 定义应用程序的需求 5
2.2 你需要哪种类型的ActiveX组件 6
2.2.1 自动化服务器和控制器 6
2.2.2 ActiveX控件 6
2.2.3 COM对象 7
2.3 为合适的工作选择合适的工具 7
2.3.1 Microsoft基本类 8
2.3.2 ActiveX模板库 8
2.3.3 BaseControl框架 8
2.3.4 建立自己的框架 9
2.4 ActiveX组件的基本结构 9
2.4.1 ActiveX自动化服务器 10
2.4.2 ActiveX控件 11
2.5 支持ActiveX组件开发的工具 11
2.5.1 MIDL编译器 12
2.5.2 Mktyplib 12
2.5.3 GUIDGEN 12
2.5.4 RegEdit 12
2.5.5 注册服务器 12
2.5.6 Ole2View 12
2.5.7 将工具加到Visual C++的开发环境 13
2.6 小结 13
第2 部分 ActiveX自动化服务器 14
第3章 用MFC生成ActiveX自动化服务器 14
3.1 生成基本项目 14
3.2 给应用程序增加自动化接口 16
3.3 注册表 19
3.3.1 服务器的注册 19
3.3.2 服务器的注销 19
3.4 服务器支持代码示例 20
3.5 增加方法 22
3.6 增加属性 27
3.7 产生OLE异常 28
3.8 双接口 33
3.9 生成双接口OLE异常 39
3.10 使用C++的服务器实例化 43
3.11 共享服务器 44
3.12 单实例服务器 47
3.13 小结 53
第4章 用AFL生成ActiveX自动化服务器 54
4.1 生成基本项目 54
4.2 给应用程序增加自动化接口 54
4.3 注册表 58
4.4 服务器支持代码示例 60
4.5 增加方法 63
4.6 增加属性 68
4.7 产生OLE异常 71
4.8 双接口 75
4.9 生成双接口OLE异常 75
4.10 使用C++的服务器实例化 76
4.11 共享服务器 77
4.12 单实例服务器 80
4.13 小结 85
第5章 用BaseCtl生成ActiveX自动化服务器 86
5.1 创建基本项目 86
5.2 注册表 87
5.3 服务器支持代码示例 88
5.4 增加方法 90
5.5 增加属性 95
5.6 产生OLE异常 96
5.7 双接口 99
5.8 生成双接口OLE异常 99
5.9 使用C++的服务器实例化 100
5.10 共享服务器 101
5.11 单实例服务器 103
5.12 用户接口和事件 105
5.13 小结 105
第3部分 ActiveX控件 106
第6章 使用MFC创建基本的ActiveX控件 106
6.1 创建基本的控件项目 106
6.2 控件注册 110
6.3 创建方法 111
6.4 属性 116
6.4.1 创建普通用户定义属性 116
6.4.2 创建参数化用户定义属性 118
6.4.3 创建Stock属性 120
6.4.4 使用Ambient属性 121
6.4.5 创建属性表 121
6.5 添加事件 125
6.6 持久性 127
6.7 绘制控件 129
6.7.1 标准绘制 129
6.8 小结 132
第7章 使用MFC开发高级ActiveX控件 133
7.1 属性 133
7.1.1 创建异步属性 133
7.1.2 静态和动态属性枚举 138
7.2 绘制控件 142
7.3 增加剪贴板和拖放支持 143
7.3.1 剪贴板支持 143
7.3.2 拖放支持 149
7.4 定制剪贴板和拖放格式 153
7.5 继承现有Windows控件 156
7.6 双接口控件 157
7.7 其他ActiveX特性 158
7.7.1 无窗口特性 158
7.7.2 无闪特性 158
7.7.3 无夹设备上下文 158
7.7.4 非活动状态时鼠标光标通知 159
7.8 小结 159
第8章 使用ATL创建基本ActiveX控件 160
8.1 创建基本的控件项目 160
8.2 控件注册 164
8.3 创建方法 166
8.4 属性 171
8.4.1 创建普通用户定义属性 171
8.4.2 创建参数化用户定义属性 173
8.4.3 创建Stock属性 176
8.4.4 使用Ambient属性 178
8.4.5 创建属性表 179
8.5 添加事件 183
8.6 持久性 187
8.7 绘制控件 187
8.7.1 标准绘制 188
8.8 小结 192
第9章 用ATL扩展高级ActiveX控件 193
9.1 属性 193
9.1.1 创建异步属性 193
9.2 静态和动态属性枚举 200
9.3 绘制控件 204
9.3.1 优化绘制 204
9.4 添加剪贴板和拖放支持 205
9.4.1 剪贴板支持 206
9.5 拖放支持 217
9.6 自定义剪贴板和拖放格式 222
9.7 继承已有的Windows控件 227
9.8 双接口控件 229
9.9 其他的ActiveX特性 230
9.9.1 无窗口特性 230
9.9.2 无抖动特性 230
9.9.3 不活动时的鼠标指针通知 230
9.9.4 优化绘制代码 230
9.9.5 异步装载属性 230
9.10 小结 231
第10章 使用BaseCtl创建基本的ActiveX控件 232
10.1 创建基本的控件项目 233
10.2 控件注册 242
10.3 创建方法 242
10.4 创建属性 249
10.4.1 创建普通的用户自定义属性 249
10.4.2 创建参数化的用户自定义属性 251
10.4.3 创建公共属性 253
10.4.4 使用环境属性 255
10.4.5 创建属性单 256
10.5 添加事件 259
10.6 持久性 262
10.6.1 文本持久性 263
10.6.2 二阶段持久性 265
10.7 绘制控件 267
10.7.1 标准绘制 267
10.8 小结 273
第11章 使用BaseCtl开发高级的ActiveX控件 274
11.1 创建属性 274
11.1.1 创建异步属性 274
11.1.2 静态和动态属性枚举 282
11.2 绘制控件 286
11.2.1 优化绘制 287
11.3 添加剪贴板和鼠标拖放支持 288
11.3.1 剪贴板支持 288
11.3.2 添加鼠标拖放支持 301
11.3.3 自定义的剪贴板和鼠标拖放格式 308
11.4 继承已有的Windows控件 314
11.5 双接口控件 316
11.6 其他的ActiveX特性 316
11.6.1 无窗口式特性 316
11.6.2 非省略式设备描述表 318
11.6.3 无闪烁特性 318
11.6.4 不活动时的鼠标指针通知 318
11.6.5 优化绘制代码 319
11.6.6 异步装载属性 319
11.7 小结 319
第4部分 COM对象和自定义接口 320
第12章 使用MFC创建ActiveX COM对象和自定义接口 320
12.1 COM对象剖析 320
12.2 建构COM对象所需的工具 322
12.2.1 MIDL编译器 322
12.2.2 GUIDGEN 322
12.2.3 RegEdit 322
12.2.4 注册服务器 323
12.2.5 在Visual C++开发环境中加入这些工具 323
12.3使用IDL定义COM接口 325
12.3.1 创建IFISH项目 325
12.3.2 创建接口定义 326
12.3.3 编译接口定义文件 328
12.3.4 创建定义文件 329
12.3.5 将RPC库加入接口项目中 330
12.3.6 注册接口 330
12.4 实现接口 331
12.4.1 使用Visual C++AppWizard来创建COM对象 332
12.4.2 存取进程内COM对象 333
12.4.3 创建实现COM接口的类 335
12.5 使用接口 343
12.5.1 OLE初始化和终止函数 343
12.5.2 COM对象存取函数 344
12.6 小结 345
第13章 使用ATL创建ActiveX COM对象和自定义接口 346
13.1 使用ActiveX模板库的好处 346
13.1.1 支持多种服务器类型 347
13.2 ATL支持的线程模式 347
13.2.1 可分离接口 348
13.2.2 实现接口集合 348
13.2.3 对错误处理的内置支持 348
13.3 使用ATL创建COM服务器 349
13.3.1 使用ATL COM Wizard创建COM服务器 349
13.3.2 检查ATL COM AppWizard的结果 351
13.3.3 实现COM服务器访问函数 352
13.3.4 使用IDL创建对象定义 354
13.3.5 实现COM接口 355
13.3.6 使用对象映射指定COM对象 358
13.4 何时使用ActiveX模板库 359
13.5 小结 359
第14章 创建自己的ActiveX COM对象和自定义接口 360
14.1 创建基本的进程内服务器 360
14.1.1 创建项目定义文件 361
14.1.2 自定义COM服务器结构 361
14.2 创建COM类COBass 362
14.3 实现COBass类工厂 366
14.4 服务器应用程序的实现 373
14.5 实现服务器访问函数 374
14.6 编译和测试COM服务器 378
14.7 小结 379
第5部分 使用自己的组件和高级话题 380
第15章 测试和使用自己的组件 380
15.1 ActiveX容器和控制器 381
15.1.1 使用Visual Basic作为容器 381
15.1.2 使用 Microsoft Visual C++作为容器 383
15.1.3 HTML和Web浏览器 387
15.1.4 ActiveX Control Pad 389
15.1.5 使用Microsoft Access,Word和Excel应用程序作为ActiveX控件的容器 391
15.2 用于测试组件的工具 394
15.2.1 Visual C++ActiveX控件测试容器 394
15.2.2 用户 398
15.2.3 自动工具 399
15.3 小结 400
第16章 高级话题 401
16.1 Internet 401
16.1.1 Internet安全性 401
16.1.2 软件签名 402
16.1.3 Internet脚本 403
16.1.4 Internet组件下载 404
16.1.5 电子贸易 405
16.2 高级COM 406
16.2.1 使用C++虚函数表描述接口 406
16.2.2 使用集合重用ActiveX对象 410
16.2.3 枚举器 418
16.3 有关本章示例的说明 420
16.4 分布式组件对象模型(DCOM) 421
16.5 OLE DB 424
16.6 线程 425
16.6.1 单线程与多线程 426
16.7 未来展望 427
16.8 小结 429