第一部分 Visual C++.NET编程基础 3
第1章 Visual C++.NET概述 3
1.1 软件开发技术 3
1.1.1 概述 3
1.1.2 计算模式 3
1.1.3 程序设计方法 5
1.1.4 软件产业与软件开发人员 6
1.2 Visual Studio.NET 7
1.2.1 Visual C++.NET的新特性 8
1.2.2 安装 8
1.2.3 集成开发环境 9
1.3 第一个例程S01_01:Hello,World! 11
1.3.1 例程说明 11
1.3.2 创建项目 11
1.3.3 设计界面 12
1.3.4 添加代码 12
1.3.5 运行测试 13
1.3.6 例程分析 13
1.3.7 例程引申 13
1.4 程序调试 15
1.4.1 错误类型 15
1.4.2 程序调试的一般过程 15
1.4.3 程序调试的其他问题 17
1.5 方法与技巧 17
1.5.1 提高Visual Studio.NET的运行性能 17
1.5.2 备份项目前清理项目 18
1.5.3 优化“解决方案资源管理器”窗口中的树目录 18
1.5.4 IDE智能感知的设置 19
1.5.5 检测代码中括号是否匹配 19
1.5.6 命名规则与方法 19
1.5.7 使用Spy++查看窗口的样式和扩展样式 21
1.5.8 生成发行版本 22
1.6 小结 22
第2章 C++语言的关键技术 23
2.1 建立上机环境 23
2.2 普通注释与特殊格式的注释 25
2.3 const与volatile的用法 25
2.3.1 const 25
2.3.2 volatile 27
2.4 sizeof与#pragma pack的用法 27
2.5 引用 29
2.5.1 引用变量 29
2.5.2 引用参数传递 29
2.6 名字空间 30
2.6.1 namespace 31
2.6.2 using 32
2.7 new与delete运算符 33
2.8 void指针 34
2.9 typeid运算符 35
2.10 函数 36
2.10.1 内联函数 36
2.10.2 指定函数形参的默认值 37
2.10.3 参数个数不定的函数 37
2.10.4 模板函数 39
2.10.5 重载函数 40
2.10.6 指向函数的指针 41
2.11 类与对象 42
2.11.1 类的封装 42
2.11.2 类的派生与继承 43
2.11.3 构造函数和析构函数 43
2.11.4 对象的引用参数传递 45
2.11.5 静态成员变量与静态成员函数 46
2.11.6 const类型成员函数与mutable 48
2.11.7 对象的初始化与初始化行 49
2.11.8 拷贝构造函数 50
2.11.9 模板类 52
2.12 友元函数与友元类 53
2.13 运算符重载 55
2.14 派生和继承 56
2.14.1 派生与继承 56
2.14.2 多重、多层派生与继承 59
2.14.3 虚基类 59
2.15 多态性和虚函数 60
2.16 异常处理 63
2.16.1 抛出和捕捉异常 63
2.16.2 多路捕捉 64
2.17 C++语言托管扩展编程 65
2.18 小结 67
第二部分 Visual C++.NET通用编程技术 71
第3章 窗口、对话框和控件 71
3.1 窗口 71
3.1.1 应用程序向导 72
3.1.2 项目文件 76
3.1.3 应用程序类 76
3.1.4 框架类 80
3.1.5 文档类和视图类 81
3.1.6 应用程序框架类中各个类及对象之间的关系 82
3.2 对话框 83
3.2.1 消息对话框 84
3.2.2 一般对话框的创建与使用流程 85
3.2.3 对话框模板编辑器 88
3.2.4 对话框中的数据交换和数据校验 90
3.2.5 模态对话框与非模态对话框 91
3.2.6 属性表对话框 94
3.2.7 向导对话框 102
3.2.8 通用对话框 103
3.3 控件 104
3.3.1 控件的选择和使用原则 104
3.3.2 分组框、复选框和单选按钮 105
3.3.3 列表控件和组合框控件 107
3.3.4 树控件 109
3.3.5 Spin控件和Slider控件 111
3.3.6 动画控件和进度控件 113
3.4 方法与技巧 115
3.4.1 禁用、激活、隐藏和显示控件 115
3.4.2 如何制作图标按钮和位图按钮 115
3.4.3 如何明确对话框的UpdateData()函数的参数含义 116
3.4.4 如何使两个编辑框控件的内容相关 116
3.4.5 如何从其他应用程序中“借用”资源 116
3.4.6 如何改变控件的颜色 117
3.5 小结 117
第4章 菜单、工具栏和状态栏 118
4.1 消息 118
4.1.1 消息映射 118
4.1.2 消息处理函数 119
4.1.3 命令消息处理过程 120
4.1.4 更新用户接口对象状态 120
4.1.5 命令消息的传递路径 121
4.2 菜单 122
4.2.1 菜单简介 122
4.2.2 菜单的实现过程 123
4.2.3 右键弹出菜单 127
4.3 工具栏 130
4.3.1 工具栏简介 130
4.3.2 工具栏的具体实现 130
4.4 状态栏 131
4.5 小结 134
第5章 绘图、字体和打印 135
5.1 绘图 135
5.1.1 DC和CDC类 135
5.1.2 GDI和CGdiObject类 136
5.1.3 绘图实例 137
5.2 文本和字体 141
5.2.1 CFont类 142
5.2.2 文本与字体例程之一 142
5.2.3 文本与字体例程之二 144
5.2.4 文本与字体例程之三 146
5.3 打印 147
5.3.1 打印原理 148
5.3.2 CPrintInfo类 148
5.3.3 CPageSetupDialog类 150
5.3.4 打印例程 155
5.4 小结 157
第6章 文件操作 158
6.1 序列化 158
6.1.1 序列化简介 158
6.1.2 序列化例程 158
6.2 CArchive类 161
6.2.1 构造CArchive类的对象 161
6.2.2 <<和>>操作符 161
6.2.3 通过Serialize函数实现信息的保存和读取 162
6.2.4 判断CArchive对象的读写状态 163
6.2.5 读写函数 163
6.2.6 访问文件 163
6.2.7 关闭CArchive对象 163
6.2.8 CArchive应用例程 164
6.3 CFile类 165
6.3.1 打开和关闭文件 165
6.3.2 文件的定位 166
6.3.3 文件的读写操作 166
6.3.4 文件的管理 166
6.3.5 文件操作时的异常 167
6.3.6 CFile类应用例程 167
6.4 文件对话框 168
6.4.1 CFileDialog类 168
6.4.2 一次选择多个文件 169
6.4.3 灵活定制文件对话框 169
6.5 内存文件类 170
6.5.1 CMemFile类 170
6.5.2 CSharedFile类 171
6.6 内存映射文件 171
6.6.1 创建和打开内存映射文件 171
6.6.2 为内存映射文件创建映射视图 172
6.6.3 使用内存映射文件共享数据 172
6.6.4 内存映射文件应用例程之一 173
6.6.5 内存映射文件应用例程之二 174
6.6.6 内存映射文件应用例程之三 178
6.7 小结 180
第三部分 Visual C++.NET高级编程技术 183
第7章 动态链接库 183
7.1 DLL概述 183
7.2 DLL程序的基本框架 184
7.2.1 例程S07_01:Win32 DLL 184
7.2.2 DLL入口点函数 185
7.2.3 例程S07_02:MFC DLL 186
7.2.4 MFC DLL的类型 188
7.2.5 查看DLL的导出内容 190
7.3 从DLL中导出函数 191
7.3.1 使用DEF文件 191
7.3.2 使用_declspec(dllexport)关键字 192
7.3.3 使用AFX_EXT_CLASS宏 193
7.4 DLL中的数据和内存 193
7.4.1 从DLL中导出数据 193
7.4.2 多个进程共享DLL中的数据和内存 194
7.5 DLL中的资源 195
7.6 程序链接 196
7.6.1 隐式链接 196
7.6.2 显式链接 196
7.7 使用和调试DLL 197
7.7.1 使用DLL 197
7.7.2 调试DLL 197
7.8 综合例程S07_04 197
7.8.1 创建空白解决方案 197
7.8.2 创建并定制DLL项目 198
7.8.3 创建并定制用户应用程序项目 202
7.9 小结 205
第8章 多线程编程 206
8.1 进程和线程 206
8.2 用户界面线程 207
8.2.1 创建用户界面线程 207
8.2.2 启动用户界面线程 208
8.2.3 使用用户界面线程 208
8.3 工作者线程 208
8.3.1 定义并实现控制函数 208
8.3.2 启动工作者线程 209
8.3.3 例程S08_01:实现工作者线程 209
8.4 线程的终止 212
8.4.1 正常终止 212
8.4.2 异常终止 212
8.4.3 正常终止与异常终止的比较 213
8.4.4 获取线程的退出码 213
8.5 线程的管理和操作 214
8.5.1 线程的优先级 214
8.5.2 控制线程的运行状态 215
8.6 线程间通信 215
8.6.1 使用同步类控制访问共享数据 215
8.6.2 使用消息队列 215
8.7 使用同步类 215
8.7.1 同步对象 216
8.7.2 同步访问对象 218
8.7.3 例程S08_02:使用互斥量对象 219
8.8 例程S08_03:多线程综合示例 220
8.8.1 创建项目 220
8.8.2 定义主对话框类 221
8.8.3 定义控制函数 224
8.8.4 定义线程类 226
8.8.5 包含所需的头文件 229
8.8.6 运行测试 229
8.9 小结 229
第9章 多媒体编程 230
9.1 声音 230
9.1.1 使用MessageBeep示例 230
9.1.2 播放WAV文件示例 231
9.1.3 各种播放声音方法的比较 233
9.1.4 用MCI控制WAV声音的播放 233
9.1.5 使程S09_02:使用MCI播放声音 234
9.2 图像 240
9.2.1 图像格式 240
9.2.2 BMP文件的结构 241
9.2.3 例程S09_03:显示图片 242
9.3 视频 246
9.3.1 播放视频的方法 246
9.3.2 例程S09_04:播放视频 247
9.4 小结 248
第10章 帮助的制作 249
10.1 概述 249
10.2 HLP帮助文件的制作与启动 250
10.2.1 编写PTF文件 250
10.2.2 插入脚注 250
10.2.3 设置格式 251
10.2.4 主题页的跳转 252
10.2.5 加入图片 252
10.2.6 HPJ文件与HLP文件 252
10.2.7 启动帮助 255
10.3 CHM帮助文件的制作与启动 256
10.3.1 HTML Help Workshop的结构 256
10.3.2 准备素材 257
10.3.3 新建项目 257
10.3.4 设置项目 258
10.3.5 建立目录文件 259
10.3.6 建立索引文件 260
10.3.7 编译运行帮助文件 260
10.3.8 启动帮助 261
10.4 小结 262
第11章 软件的安装与部署 263
11.1 Microsoft Windows安装程序介绍 263
11.2 生成安装程序的简单示例 264
11.3 部署中使用编辑器 265
11.3.1 文件系统编辑器 265
11.3.2 文件类型编辑器 268
11.3.3 部置中的注册表设置管理 269
11.3.4 部署中的用户界面管理 271
11.3.5 部署中的自定义操作管理 273
11.3.6 在部署中启动条件管理 274
11.4 小结 275
第四部分 数据库开发技术 279
第12章 关系数据库 279
12.1 数据库基本知识 279
12.1.1 为什么要使用数据库 279
12.1.2 数据库技术的发展 279
12.1.3 数据库的分类 280
12.1.4 现有的各种数据库 281
12.1.5 通常进行的数据库方面的应用和开发 281
12.1.6 关于本章的例程数据库 282
12.2 关系数据库 283
12.2.1 关系模型 283
12.2.2 表 284
12.2.3 记录 284
12.2.4 字段 284
12.2.5 数据类型 284
12.2.6 键 284
12.2.7 索引 285
12.2.8 关系和完整性 285
12.3 结构查询语言 286
12.3.1 SQL及其特点 286
12.3.2 数据查询 287
12.3.3 数据操作 290
12.3.4 数据定义 291
12.4 关系数据库的设计 292
12.4.1 设计数据库的基本规则 292
12.4.2 设计数据库时遵循的三个范式 292
12.4.3 实体-关系图 293
12.5 Access的使用 294
12.5.1 例程数据库的设计说明 294
12.5.2 创建数据库 294
12.5.3 在数据库中对表的添加、修改和删除 295
12.5.4 为表建立关系 296
12.5.5 对表的记录进行添加、修改和删除 296
12.5.6 在数据库中对查询的添加、修改和删除 297
12.5.7 为表添加、修改和删除索引 298
12.6 方法与技巧 298
12.7 小结 299
第13章 数据库访问与Visual C++.NET 300
13.1 数据访问技术概述 300
13.1.1 ODBC 300
13.1.2 DAO 301
13.1.3 OLE DB 301
13.1.4 ADO 302
13.1.5 ADO.NET 302
13.2 通用数据访问 303
13.3 可视化数据库工具 304
13.3.1 可视化数据库工具所能完成的工作 304
13.3.2 服务器资源管理器 304
13.3.3 添加连接 305
13.3.4 开发数据库 306
13.4 数据库项目 306
13.4.1 数据库项目概述 306
13.4.2 区别数据库连接与数据库引用 308
13.4.3 使用数据库项目 309
13.5 Visual C++.NET中已安装的数据库支持 310
13.6 小结 311
第14章 ODBC编程 312
14.1 ODBC基础 312
14.1.1 ODBC体系结构 312
14.1.2 ODBC数据源管理器 313
14.1.3 游标和ODBC游标库 315
14.2 使用ODBC API编程 317
14.2.1 例程S14_01 317
14.2.2 ODBC API的编程步骤 319
14.3 使用MFC ODBC编程 321
14.3.1 MFC ODBC类 321
14.3.2 文档与视图 322
14.3.3 使用MFC ODBC类:例程S14_02 322
14.3.4 连接到数据源 325
14.3.5 ODBC记录集 327
14.3.6 记录字段交换 329
14.3.7 CRecordView类 333
14.3.8 添加、删除和更新记录 333
14.3.9 参数化记录集 339
14.3.10 执行联接 341
14.4 小结 343
第15章 OLE DB API编程 344
15.1 OLE DB编程概述 344
15.1.1 OLE DB的特点 344
15.1.2 OLE DB应用程序的组件 345
15.2 OLE DB对象层次结构 345
15.2.1 OLE DB对象的属性 346
15.2.2 OLE DB应用程序流程 350
15.2.3 枚举器 351
15.2.4 数据源 353
15.2.5 会话 358
15.2.6 命令 360
15.2.7 行集合 366
15.2.8 访问器 368
15.2.9 事务 371
15.2.10 错误 372
15.3 使用OLEDB API来访问数据 376
15.3.1 创建例程S15_03 376
15.3.2 例程S15_03说明 377
15.4 小结 377
第16章 ATL OLE DB编程 378
16.1 OLE DB编程方法概述 378
16.2 MFC OLE DB编程 378
16.3 OLE DB模板 380
16.4 OLE DB使用者模板 380
16.4.1 OLE DB使用者模板框架 380
16.4.2 通用数据源支持 381
16.4.3 行集合与绑定支持 381
16.4.4 命令和表支持 382
16.4.5 用户记录 382
16.4.6 创建OLE DB使用者 383
16.5 OLE DB提供程序模板 386
16.5.1 概述 386
16.5.2 OLE DB提供程序模板的结构 387
16.5.3 创建OLE DB提供程序 388
16.5.4 使用OLE DB提供程序模板 396
16.6 小结 397
第17章 ADO编程 398
17.1 ADO基础概述 398
17.1.1 ADO简介 398
17.1.2 使用ADO的方法 399
17.2 使用ActiveX控件开发ADO应用 399
17.2.1 支持数据绑定的技术 399
17.2.2 在ActiveX中绑定数据 400
17.2.3 支持数据绑定的ActiveX控件 400
17.2.4 数据控件 400
17.2.5 数据绑定控件 401
17.2.6 创建数据源连接 401
17.2.7 使用ADO数据绑定 402
17.2.8 使用ADO控件操作数据 404
17.3 ADO的对象和集合 405
17.3.1 连接对象 406
17.3.2 命令对象 407
17.3.3 记录集对象 409
17.3.4 记录对象 412
17.3.5 流对象 412
17.3.6 字段对象 413
17.3.7 参数对象 413
17.3.8 属性对象 413
17.3.9 错误对象 413
17.4 使用ADO对象开发应用 414
17.4.1 在Visual C++应用程序中使用ADO对象的方法 414
17.4.2 使用ADO对象创建数据库应用程序 417
17.4.3 编辑数据 420
17.4.4 使用Visual C++的ADO扩展 422
17.5 小结 425
第五部分 分布式计算技术 429
第18章 ActiveX控件 429
18.1 ActiveX控件概述 429
18.1.1 ActiveX控件 429
18.1.2 属性 429
18.1.3 方法 430
18.1.4 事件 430
18.1.5 ActiveX控件容器 431
18.1.6 属性页 431
18.1.7 ActiveX控件的基本组件 432
18.2 使用MFC开发ActiveX控件 432
18.2.1 创建MFC ActiveX控件项目 432
18.2.2 向导创建的控件项目框架 433
18.2.3 测试ActiveX控件 434
18.2.4 添加属性 436
18.2.5 添加处理消息 441
18.2.6 添加事件 441
18.2.7 添加方法 443
18.2.8 实现属性页 445
18.3 使用ATL开发ActiveX控件 448
18.3.1 ATL概述 448
18.3.2 ATL COM对象基础 449
18.4 在应用程序中使用ActiveX控件 450
18.5 小结 450
第19章 组件对象模型 451
19.1 分布式计算技术概述 451
19.1.1 客户机/服务器计算模式 451
19.1.2 新的需求对分布式计算模式的要求 451
19.1.3 分布式计算模式的原理 452
19.1.4 Visual Studio.NET对分布式计算模式的支持 453
19.2 COM技术基础 453
19.2.1 COM技术的发展历史 453
19.2.2 使用C++抽象基类 454
19.2.3 COM技术原理 456
19.3 活动模板库 459
19.3.1 例程简介 459
19.3.2 创建工程 459
19.3.3 添加控件 460
19.3.4 测试控件 462
19.3.5 添加属性 462
19.3.6 绘画控件 464
19.3.7 添加事件 465
19.3.8 添加属性页 467
19.3.9 例程说明 469
19.4 小结 470
第20章 .NET框架 471
20.1 微软.NET战略 471
20.2 .NET框架概述 471
20.2.1 .NET框架的目标 471
20.2.2 .NET框架的用户 471
20.2.3 .NET框架的体系结构 472
20.2.4 开发语言与工具 473
20.2.5 客户端应用程序开发 474
20.2.6 服务器应用程序开发 474
20.3 公用语言运行时环境 475
20.3.1 概述 475
20.3.2 支持的CLR语言 476
20.3.3 托管执行过程 477
20.3.4 微软中间语言 478
20.3.5 内存类型安全 479
20.3.6 自动内存管理 479
20.3.7 垃圾回收编程 484
20.3.8 元数据 488
20.3.9 程序集 489
20.3.10 名字空间 494
20.3.11 应用程序域 495
20.3.12 通用类型系统 495
20.3.13 公用语言规范 497
20.4 .NET框架类库 497
20.5 小结 500
第21章 .NET数据访问 501
21.1 ADO.NET概述 501
21.1.1 ADO.NET的设计目标 501
21.1.2 ADO.NET与ADO 502
21.1.3 ADO.NET的体系结构 502
21.1.4 .NET数据提供程序 503
21.1.5 在Visual C++.NET中使用ADO.NET:例程S21_01 504
21.1.6 使用通用接口 507
21.2 使用ADO.NET数据提供程序 508
21.2.1 Connection 508
21.2.2 Command 509
21.2.3 DataReader 510
21.2.4 DataAdapter 510
21.3 使用DataSet 510
21.3.1 编程构架DataSet 511
21.3.2 DataAdapter与DataSet 511
21.3.3 更新数据源 512
21.3.4 自动生成命令 517
21.3.5 DataSet与数据绑定控件 518
21.4 DataSet与XML 519
21.4.1 DataSet的XML交互方法 520
21.4.2 将DataSet写出到XML 520
21.4.3 从XSD加载DataSet 522
21.4.4 从XSD推测DataSet架构 524
21.5 小结 524
第22章 ASP.NET编程 525
22.1 ASP.NET概述 525
22.1.1 Web服务器与Web页 525
22.1.2 ASP.NET简介 526
22.1.3 平台要求 526
22.1.4 ASP.NET的工作原理 529
22.1.5 应用实例 529
22.1.6 Visual Studio中的Web应用程序 530
22.2 Web窗体 532
22.2.1 Web窗体简介 532
22.2.2 Web窗体与HTML窗体 533
22.2.3 Web窗体代码模型 533
22.2.4 Web窗体语法 536
22.2.5 Web窗体服务器控件 542
22.2.6 HTML服务器控件 542
22.2.7 Web服务器控件 543
22.2.8 用户控件 548
22.2.9 可重用代码 552
22.3 小结 553
第23章 Web服务 554
23.1 Web服务 554
23.1.1 Web服务概述 554
23.1.2 Web服务结构 554
23.1.3 Web服务实现模型 560
23.2 创建Web服务 560
23.2.1 不使用Visual Studio.NET 560
23.2.2 使用Visual Studio.NET 562
23.3 发布与部署Web服务 564
23.3.1 部署Web服务 564
23.3.2 启用Web服务的发现 565
23.4 使用Web服务 566
23.4.1 使用Visual Studio.NET 566
23.4.2 使用文本编辑器创建Web服务客户程序 568
23.4.3 从浏览器访问Web服务 569
23.4.4 访问Intemet上的Web服务 571
23.5 ASP.NET创建Web服务的高级内容 573
23.5.1 Web服务中的事务处理 573
23.5.2 Web服务中的状态管理 575
23.5.3 Web服务中的安全 576
23.6 小结 578
附录 术语和缩略词 579