第1篇 MFC高级编程 1
第1章 应用程序框架 1
1.1 应用程序、框架、文档和视图 1
1.1.1 基本介绍 1
1.1.2 文档模板 3
1.1.3 文档和视图 4
1.1.4 最简单的文档/视图应用 7
1.2 消息处理 8
1.2.1 发送和寄送消息 8
1.2.2 消息类型 9
1.2.3 使用MFC处理接收到的消息 12
1.2.4 创建自定义的消息 13
1.2.5 消息的重定位 17
1.3 切分窗口 24
1.3.1 切分窗口概述 24
1.3.2 动态切分窗口 25
1.3.3 静态切分窗口 26
1.3.4 滚动视图和CScrollView类 27
1.4 单文档应用程序切分窗口编程举例——SDISplitter 28
1.4.1 创建工程和资源 28
1.4.2 切分窗口 31
1.4.3 添加功能代码 34
1.4.4 编译并生成可执行文件 35
1.5 多文档界面编程举例——MDISplitter 35
1.5.1 创建工程 36
1.5.2 修改文档和视图类 36
1.5.3 完成视图类CEnterView 38
1.5.4 完成视图类CShowView 41
1.5.5 完成CSplitFrame类 43
1.5.6 添加模板资源 44
1.5.7 编译并生成可执行文件 45
2.1 动态链接库的基本理论 46
第2章 动态链接库 46
2.1.1 导入函数和导出函数 47
2.1.2 隐式连接和显式连接 48
2.1.3 选择连接方式 49
2.1.4 DLL入口点——DllMain 50
2.1.5 动态链接库的定位 50
2.2 使用MFC编写DLL 51
2.2.1 MFC扩展DLL 51
2.2.2 MFC扩展DLL的资源搜索顺序 52
2.2.3 扩展DLL实例——ExtensionDll 52
2.2.4 测试扩展DLL 55
2.2.6 MFC规则DLL的资源搜索顺序 59
2.2.7 规则DLL实例——RegularDll 59
2.2.5 MFC规则DLL 59
2.2.8 测试规则DLL 61
第3章 进程和线程 62
3.1 进程 62
3.1.1 基本理论 62
3.1.2 进程的创建 63
3.1.3 进程的终止 68
3.1.4 子进程 70
3.2 多线程编程 72
3.2.1 线程的基础知识 72
3.2.2 线程的优先级 73
3.2.3 创建辅助线程和用户界面线程 75
3.2.4 一个简单的实例 78
3.2.5 线程的挂起和唤醒 83
3.2.6 线程的休眠 83
3.2.7 线程的同步 84
3.2.8 事件对象 84
3.2.9 使用临界段 89
3.2.10 使用互斥量 91
3.2.11 使用信号量 94
3.2.12 一个复杂的线程例子 96
4.1.2 COM本质 111
4.1.1 COM所解决的问题 111
4.1 组件对象模型COM简介 111
第4章 COM编程 111
第2篇 组件编程 111
4.1.3 COM对象类型 112
4.1.4 COM的利与弊 113
4.2 COM对象和接口 114
4.2.1 COM对象 114
4.2.2 全球惟一标识符GUID 114
4.2.3 COM对象的特点 116
4.2.4 COM接口 117
4.2.5 接口描述语言IDL 120
4.2.6 接口的特点 121
4.3 IUnknown接口 122
4.3.1 引用计数 123
4.3.2 接口查询 124
4.4 COM的实现 126
4.4.1 COM组件的实现规则 127
4.4.2 进程内组件和进程外组件 127
4.4.3 类厂 129
4.4.4 建立一个模拟COM组件服务器程序 131
4.4.5 COM库 140
4.5 COM客户 142
4.5.1 COM对象创建函数 142
4.5.2 运行时的COM对象注册 144
4.5.3 COM客户程序调用进程内组件 145
4.5.4 COM客户程序调用进程外组件 146
4.6 MFC对COM的支持 147
4.6.1 MFC接口宏 148
4.6.2 MFC对自动化的支持 152
4.6.3 MFC对ActiveX控件的支持 152
4.6.4 MFC对复合文档的支持 154
4.7 基于MFC的COM编程举例 154
4.7.1 使用MFC创建服务程序 155
4.7.2 创建COM客户程序 160
4.8 COM的高级特性 162
4.8.1 包容和聚合 162
4.8.2 实现包容和聚合 164
4.8.3 列集 166
4.8.4 多线程特性 168
4.9 COM扩展技术——COM+ 172
4.9.1 COM与Windows DNA 172
4.9.2 组件服务配置 173
4.9.3 事务处理 175
4.9.4 排队组件 176
4.9.5 动态负荷平衡 177
4.9.6 对象池 178
5.1.3 容器和服务器 179
5.1.2 对象链接和嵌入 179
5.1 Active技术概述 179
第5章 ATL控件编程 179
5.1.1 ActiveX的用途 179
5.1.4 ActiveX自动化编程 180
5.1.5 ActiveX控件 180
5.2 ActiveX控件编程 181
5.2.1 ActiveX控件的事件 181
5.2.2 ActiveX控件的方法 184
5.2.3 ActiveX控件的属性 185
5.2.4 ActiveX控件的属性页 186
5.3 ATL基础 187
5.3.3 何时使用ATL 189
5.4 ATL窗口类 189
5.3.1 使用模板库 189
5.3.2 ATL适用范围 189
5.4.1 使用窗口 190
5.4.2 实现一个窗口 190
5.4.3 实现一个对话框 192
5.4.4 使用容器窗口 193
5.5 连接点 194
5.5.1 连接点类 194
5.5.2 给对象增加一个连接点 194
5.6 枚举器 195
5.5.3 连接点的例子 195
5.7 代理 196
5.7.1 ATL代理 196
5.7.2 生成连接点或快捷指针的代理 196
5.8 创建一个简单的ATL控件 196
5.8.1 创建工程 197
5.8.2 添加控件 198
5.8.3 增加属性 203
5.8.4 修改绘图代码 205
6.1.1 ATL Server宏 208
6.1 ATL Server简介 208
第6章 ATL Serer编程 208
6.1.2 ATL Server属性 209
6.1.3 ATL Server函数 214
6.1.4 服务器响应文件 215
6.1.5 ATL Server程序结构 215
6.1.6 创建ATL Server工程 217
6.2 SOAP规范 222
6.2.1 设计目标 222
6.2.2 符号约定 223
6.2.3 SOAP消息示例 223
6.2.4 SOAP消息交换模型 224
6.3.1 什么是XML 227
6.3 XML简介 227
6.3.2 XML元素 229
6.3.3 XML元素的内容和属性 230
6.3.4 一个简单的XML例子 231
6.4 XSL简介 235
6.4.1 CSS:HTML的样式表 235
6.4.2 XSL:XML的样式表 235
6.4.3 XSLT:XSL转换 236
6.4.4 XSL如何工作 236
6.5 XSL转换 236
6.5.1 从XML文档开始 236
6.5.3 将样式表连接到XML文档 237
6.5.2 创建一个XSL样式表 237
6.5.4 XSL模板 238
6.5.5 客户端XSL 240
6.5.6 服务器端XSL 241
6.6 ATL Web服务编程简介 242
6.6.1 Web服务概述 242
6.6.2 ATL Web服务的基础结构 243
6.6.3 服务描述 243
6.6.4 创建ATL Web服务提供者程序 243
6.6.5 创建ATL Web服务客户程序 247
第7章 .NET框架编程 252
7.1 初识.NET 252
7.2.1 虚拟对象系统 253
7.2 .NET结构简介 253
7.2.2 元数据 254
7.2.3 公用语言规范 254
7.2.4 虚拟执行系统 254
7.2.5 .NET框架结构 255
7.3 理解.NET框架编程 255
7.3.1 公用语言运行时环境 255
7.3.2 深入理解公用语言规范 256
7.3.3 受控执行 257
7.3.4 程序集 257
7.3.5 元数据和自我描述组件 258
7.3.6 .NET框架的基本单元——类型 259
7.4 托管扩展编程方法 266
7.5 何时使用C++托管扩展语言 266
7.6 公用类型系统 267
7.7 C++托管扩展语言简介 267
7.7.1 受控类型 268
7.7.2 受控数组 269
7.7.3 C++托管扩展中的字符串 270
7.7.4 C++托管扩展中的代理 270
7.7.5 受控对象的属性 271
7.8.1 在现有工程中添加对C++托管扩展的支持 272
7.8 使用C++托管扩展语言进行编程 272
7.8.2 全局属性和扩展受控C++ 273
7.8.3 受控类型和MFC 274
7.9 C#简介 275
7.10 C#语言的特点 275
7.10.1 简洁的语法 276
7.10.2 精心的面向对象设计 276
7.10.3 与Web的紧密结合 277
7.10.4 完全的安全性与错误处理 277
7.10.5 版本处理技术 277
7.11.1 创建托管的C++应用程序项目 278
7.11 创建托管的C++应用程序 278
7.10.6 灵活性和兼容性 278
7.11.2 实现主框架窗口 280
7.11.3 实现Stroke类 285
7.11.4 实现文档和视图 286
7.11.5 添加设置线宽对话框 289
7.11.6 编译并运行应用程序 291
7.12 使用C#编写.NET应用 292
7.12.1 使用C#语言的原因 293
7.12.2 HelloWorld的C#版 293
7.12.3 C#程序的常规结构 295
7.12.4 创建和使用C#DLL 296
8.1 MFC支持的数据库访问类型 299
第8章 用Visual C++.NET开发数据库应用程序 299
第3篇 数据库编程 299
8.1.1 ODBC 300
8.1.2 DAO 300
8.1.3 比较ODBC与DAO 301
8.1.4 OLE DB 302
8.2 开发数据库应用程序的方法 303
8.2.1 通过API访问数据库 304
8.2.2 通过数据对象接口访问数据库 304
8.3 构造数据库 305
8.3.1 数据库概述 305
8.3.2 创建数据库 307
第9章 用ODBC开发数据库应用程序 312
9.1 ODBC起源 312
9.2 ODBC的工作机制 313
9.2.1 ODBC标准 313
9.2.2 ODBC驱动程序管理器 314
9.2.3 ODBC驱动程序 314
9.2.4 ODBC数据源管理器 314
9.2.5 ODBC一致层 315
9.2.6 ODBC的两种版本 315
9.3 MFC封装的ODBC数据库类 316
9.4.1 连接到数据库 317
9.4.2 打开和关闭记录集 317
9.4 使用CRecordset类 317
9.4.3 浏览记录集 318
9.5 添加、更新和删除记录 319
9.5.1 确定记录集是否可更新 319
9.5.2 将记录添加到记录集 320
9.5.3 编辑记录集中的记录 321
9.5.4 从记录集中删除记录 321
9.6 利用书签和绝对位置定位记录 322
9.7 排序与过滤 323
9.7.1 对记录排序 323
9.7.2 筛选记录 323
9.8 创建ODBC应用程序 325
9.8.1 注册数据库 326
9.8.2 利用应用程序向导创建应用程序外壳 328
9.8.3 显示数据库的记录 332
9.8.4 添加、删除和修改记录 336
9.8.5 定位到指定的记录 340
9.8.6 排序与过滤 346
第10章 用DAO开发数据库应用程序 352
10.1 DAO、COM和Microsoft Jet数据库引擎 352
10.2 MFC中的DAO类 352
10.2.1 MFC如何封装DAO 353
10.2.2 DAO对象和MFC类 353
10.4 DAO记录集类型 354
10.3 利用DAO可以打开的数据库 354
10.4.1 按ODBC模式使用DAO 355
10.4.2 DAO表类型记录集 355
10.5 DAO的其他特性 356
10.6 使用MFC DAO类创建和运行查询 356
10.7 使用DAO 358
10.7.1 打开记录集 358
10.7.2 动态绑定记录 360
10.8 利用DAO构造数据库应用程序 362
10.8.1 创建一个简单的DAO数据库访问应用程序 363
10.8.2 进一步完善应用程序的功能 372
11.1 什么是SQL 380
第11章 使用服务器资源管理器 380
11.2 SQL语法基础 381
11.2.1 数据控制语言语句 381
11.2.2 数据定义语言语句 381
11.2.3 数据操作语言语句 383
11.3 在C++中利用SQL操作数据库 386
11.4 创建Procedure应用程序 387
11.4.1 创建应用程序外壳 387
11.4.2 数据连接 389
11.4.3 服务器资源管理器 392
11.4.4 查询设计器 393
11.4.5 存储过程 395
11.4.6 编写存储过程 398
11.4.7 利用C++代码调用存储过程 400
11.5 利用服务器资源管理器管理数据库 405
11.5.1 设计数据库 405
11.5.2 使用数据库关系图 408
11.6 Microsoft事务处理服务器 410
第12章 用ADO开发数据库应用程序 412
12.1 ADO概述 412
12.1.1 OLE DB与ADO 412
12.1.2 ADO和RDO、DAO的比较 414
12.1.3 ADO对象 414
12.2 ADO.NET简介 416
12.2.1 为何使用ADO.NET 417
12.2.2 ADO.NET的体系结构 418
12.2.3 ADO.NET和ADO 419
12.2.4 ADO、ADO.NET与OLE DB 421
12.3 如何使用ADO DLL 424
12.3.1 引入ADO DLL 424
12.3.2 建立到数据库的连接 425
12.3.3 执行命令并获取数据 425
12.3.4 浏览记录集 427
12.3.5 访问字段值 427
12.3.6 ADO中的宏 427
12.3.8 添加和删除记录 428
12.3.7 更新记录 428
12.3.9 关闭Recordset对象和Connection对象 429
12.4 使用ADO创建数据库应用程序 429
12.4.1 创建应用程序外壳 430
12.4.2 创建定制的记录类 431
12.4.3 连接和获取数据 434
12.4.4 显示记录 436
12.4.5 保存修改结果 438
12.4.6 浏览记录集 439
12.4.7 增加新记录 443
12.4.9 进一步完善应用程序功能 445
12.4.8 删除当前记录 445
第13章 使用ADO.NET开发数据库应用程序 448
13.1 ADO.NET概述 448
13.1.1 ADO.NET对象模型 448
13.1.2 记录集和数据集 450
13.1.3 使用命名空间 451
13.2 连接数据源 452
13.3 用DataSets访问数据 453
13.3.1 用DataSets读数据 453
13.3.2 在DataSet中存储多个表 456
13.3.3 DataTable对象 458
13.3.5 在DataGrid控件中显示数据 460
13.3.4 使用DataView 460
13.3.6 使用模板 463
13.3.7 使用Repeater控件 464
13.4 使用存储过程 465
13.4.1 调用存储过程 465
13.4.2 传递参数 467
13.5 用DataReaders访问数据 469
13.5.1 创建DataReader 469
13.5.2 从DataReader读数据 470
13.5.3 使用DataSets还是DataReaders 472
14.1 网络基础 474
14.1.1 OSI网络模型 474
第14章 Internet编程 474
第4篇 网络编程 474
14.1.2 OSI网络模型概述 475
14.2 Winsock编程 475
14.2.1 Windows套接字 476
14.2.2 Winsock的版本和平台 476
14.2.3 Winsock函数 479
14.2.4 MFC的Winsock类 489
14.3 WinInet编程 499
14.3.1 WinInet概述 499
14.3.2 使用MFC WinInet类编写Internet客户端应用程序 499