第1章 绪论 1
1.1 VC++.NET 概述 1
1.2 VC++.NET 的新特性 2
1.2.1 安装 2
1.2.2 基本类库 2
1.2.3 属性化编程 2
1.2.4 集成开发环境 2
1.2.5 托管 C++ 4
1.3 为什么要学习 VC++.NET 4
1.4 学习 VC++.NET 的方法 4
1.5 学习 VC++.NET 的几大禁忌 5
1.5.1 半途而废 5
1.5.2 “大全”的危害 6
1.5.3 没有基础 6
案例1-1 基于 MFC 的 Visual C++.NET 应用程序框架 6
第2章 C++语言基础 14
2.1 C++与 C 语言的关系 14
2.1.1 C 语言的特点 14
2.1.2 C 语言的局限 15
2.1.3 C++语言的特点 15
2.1.4 C++程序结构 15
案例2-1 创建一个最简单的 Win32应用 15
2.2 引用与函数的单向值传递 19
2.2.1 引用 19
2.2.2 引用与指针 21
2.2.3 函数的单向值传递 24
2.2.4 指针与引用用作函数参数 26
2.3 类与对象 28
2.3.1 类说明 28
2.3.2 对象说明 29
2.3.3 对象的使用 29
2.3.4 构造函数与析构函数 31
2.4 封装 32
2.4.1 封装的概念 32
2.4.2 封装的意义 32
2.5 继承 33
2.5.1 继承的概念 33
2.5.2 继承的实现 34
2.5.3 继承的应用 35
2.5.4 关于继承的几点说明 38
2.6 多态 39
2.6.1 多态性 39
2.6.2 编译时的多态性 40
2.6.3 虚函数 42
2.6.4 运行时的多态性 42
2.6.5 虚函数的访问权限 43
2.6.6 纯虚函数 44
2.6.7 赋值 45
案例2-2 虚拟的绘图应用 45
第3章 浅析微软的 MFC 51
3.1 Win32应用 51
3.1.1 Win32程序框架 51
3.1.2 Win32程序设计基础 52
3.2 MFC 结构 62
3.2.1 MFC 概述 62
3.2.2 MFC 结构体系 63
3.3 MFC 的消息机制 64
3.3.1 系统消息 64
案例3-1 在 MFC 应用框架中实现简单的系统消息 64
3.3.2 窗口消息 68
3.3.3 自定义消息 69
案例3-2 完成自定义消息的定义与处理 70
3.3.4 消息映射 72
3.3.5 几处变化 72
3.4 MFC 的基石 73
3.4.1 文档视图结构应用框架 73
3.4.2 面向对象的 C++思想 77
3.4.3 文档与视图通信 78
第4章 对话框应用 80
4.1 对话框应用概述 80
4.2 控件及其应用 80
4.2.1 简单控件的使用 81
案例4-1 创建使用简单控件的基于对话框的应用程序 81
4.2.2 复杂控件的使用 91
案例4-2 使用复杂控件 91
4.2.3 控件的使用原则 99
案例4-3 使用对话框与控件开发一个磁盘空间监视器 99
第5章 MFC 的文档与视图 109
5.1 理解文档与视图 109
5.1.1 文档与视图的关系 109
5.1.2 理解单文档 109
5.1.3 理解多文档 114
5.2 拆分窗口 117
5.2.1 拆分窗口 117
5.2.2 使用拆分窗口的意义 119
5.2.3 拆分窗口的实现 119
案例5-1 实现动态拆分窗口 120
案例5-2 实现静态拆分窗口 123
5.3 菜单 127
5.3.1 菜单资源 127
5.3.2 菜单项的映射与处理 129
5.3.3 更新命令用户接口消息 131
5.3.4 多个命令映射到同一入口函数 132
5.3.5 动态创建菜单 134
案例5-3 创建并使用动态菜单 134
5.4 工具栏 137
5.4.1 工具栏资源 137
5.4.2 工具栏编程 138
5.4.3 浮动工具栏编程 139
案例5-4 浮动工具栏应用 139
第6章 绘图 144
6.1 设备描述表(DC) 144
6.1.1 设备描述表 144
6.1.2 使用设备描述表 144
6.1.3 设备描述表分类 145
6.2 绘图对象 146
6.2.1 画笔 147
6.2.2 画刷 149
6.2.3 字体 152
6.2.4 区域 154
6.2.5 库存对象 155
6.2.6 其他绘图对象 156
6.3 映射模式 156
6.3.1 默认映射模式 MM_TEXT 156
6.3.2 与设备无关的映射模式 158
6.3.3 可变映射模式 159
6.3.4 坐标变换 162
案例6-1 确定鼠标是否点中矩形区域 162
6.4 函数 OnDraw 165
案例6-2 在客户区内绘制转动的轮子 166
第7章 输入与输出 176
7.1 概述 176
7.2 对话框 177
7.2.1 对话框资源 177
7.2.2 模式对话框与无模式对话框 178
7.2.3 创建模式对话框 179
案例7-1 使用一个模式对话框向应用程序输入文本信息 179
7.2.4 创建无模式对话框 182
案例7-2 使用无模式对话框向应用程序输入文本信息 183
7.2.5 公用对话框 185
7.3 属性页、属性表和属性向导 188
7.3.1 属性页与属性表 188
案例7-3 创建属性表 188
7.3.2 属性向导 194
7.4 鼠标与键盘 198
7.4.1 鼠标数据 198
案例7-4 在屏幕上拖动正方形 198
7.4.2 键盘信息 201
7.5 文件 204
7.5.1 文件概述 204
7.5.2 文档序列化 205
案例7-5 文档的读写 206
案例7-6 序列化对象 210
7.5.3 直接读写文件 214
7.5.4 灵活地使用 C 语言的文件操作函数 217
第8章 动态链接库 220
8.1 动态链接库概述 220
8.2 动态链接库基础 221
8.2.1 动态链接库函数的导入与导出 221
8.2.2 编译器对导入与导出的影响 221
8.2.3 隐式链接与显式链接 222
8.2.4 动态链接库入口点 223
8.2.5 客户程序如何寻找动态链接库 224
8.2.6 使用动态链接库的好处 225
8.3 使用 MFC 创建和使用动态链接库 225
8.3.1 创建扩展动态链接库 225
案例8-1 创建一个带有基本运算功能的扩展动态链接库 225
8.3.2 使用扩展动态链接库 228
案例8-2 使用扩展动态链接库完成简单的计算器应用 228
8.3.3 创建规则动态链接库 231
案例8-3 创建一个带有基本运算功能的规则动态链接库 232
8.3.4 使用规则动态链接库 235
案例8-4 使用规则动态链接库完成简单的计算器应用 235
8.3.5 通过显式链接使用动态链接库 236
案例8-5 通过显式链接使用规则动态链接库完成计算器应用 236
第9章 打印与打印预览 239
9.1 打印的实现 239
9.1.1 打印设备描述表与屏幕设备描述表 239
9.1.2 用 MFC 实现最简单的打印 240
案例9-1 使用 MFC 实现一个简单的设备无关的打印功能 240
9.2 使用 MFC 实现定制打印 242
9.2.1 使用 MFC 打印的内在机理 242
9.2.2 使用 MFC 打印预览的内在机理 244
案例9-2 实现多页打印 245
9.2.3 打印页眉和页脚 247
案例9-3 打印一份酒店便签 247
9.2.4 实现打印与显示不同 250
案例9-4 实现打印与显示的分离 250
第10章 数据库编程 257
10.1 数据库 257
10.1.1 关系型数据库模型 257
案例10-1 创建简单的 Access 数据库 257
10.1.2 数据库访问 261
10.1.3 数据源 261
案例10-2 创建数据库 BDB 的数据源 261
10.1.4 Visual C++.NET 的 ODBC 类 264
10.2 操纵数据库 264
10.2.1 建立数据库表与应用的连接 265
案例10-3(上) 创建 ODBC 数据库应用程序 265
10.2.2 完成数据库查询与修改操作 271
案例10-3(下) 完成对数据库的查询与修改 272
10.3 OLE DB、ADO 和 SQL 276
10.3.1 什么是 OLE DB 276
10.3.2 什么是 ADO 276
10.3.3 ADO 和 OLE DB 276
10.3.4 SQL 277
第11章 使用托管 C++进行.NET 编程 278
11.1 概述 278
11.1.1 托管 C++语言出现的背景 278
11.1.2 托管 C++与.NET 框架 279
11.1.3 使用托管 C++语言 279
11.2 理解.NET 框架 279
11.2.1 公共语言运行环境(CLR) 280
11.2.2 部件(assemblies) 281
11.2.3 元数据(metadata) 281
11.3 托管 C++语言基础 282
11.3.1 理解托管类型 282
11.3.2 值类型 283
11.3.3 垃圾收集类型(引用类型) 285
11.3.4 封箱(boxed)与拆箱(unboxed) 286
案例11-1 使用应用向导创建一个空的托管 C++应用 286
11.3.5 接口类型 289
11.3.6 数组 291
11.3.7 字符串 291
案例11-2 使用应用向导创建一个托管 C++项目 292
11.3.8 代理(delegate) 294
11.3.9 属性成员 295
11.3.10 对异常的处理 299
11.3.11 别针型指针 301
11.4 完整的托管应用程序 303
案例11-3 创建一个记事本应用程序 303
第12组 组件对象模型 320
12.1 概述 320
12.1.1 什么是 COM 320
12.1.2 为什么要用 COM 编写组件 321
12.1.3 学习 COM 之前的准备 321
12.2 学习 COM 所必须了解的概念 321
12.2.1 接口(interface) 321
12.2.2 组件 323
12.2.3 引用计数 324
12.2.4 全局惟一标识 GUID 324
12.2.5 返回值类型 HRESULT 325
12.2.6 类工厂(Class Factory) 328
12.2.7 服务器 329
12.2.8 注册表 329
12.2.9 客户端应用 329
12.3 创建一个“裸”COM 组件 329
12.3.1 创建过程 330
案例12-1 手工创建 COM 组件 330
12.3.2 调用 COM 组件的过程 344
12.3.3 创建 COM 组件客户 345
案例12-2 创建使用 BareCOM 组件的客户端应用 346
12.4 使用 ATL 创建实用的 COM 组件 348
12.4.1 模板简介 349
12.4.2 理解 ATL 351
12.4.3 代理占位模块与 DCOM 网络协议 353
12.4.4 使用 ATL 创建组件 353
案例12-3 使用 ATL 创建完成加法功能的组件 354
12.4.5 使用由 ATL 创建的组件 356
案例12-4 创建一个使用 SimpleObj 组件的客户应用 357