第1章 Visual C++6.0的最初印象 1
1.1 Visual C++6.0概述 2
1.1.1 Visual C++6.0的特点 2
1.1.2 安装Visual C++6.0 2
1.2 Visual C++6.0开发环境 5
1.2.1 熟悉集成开发环境 5
1.2.2 菜单项 7
1.2.3 工具栏 16
1.2.4 项目与项目工作区 17
1.2.5 编辑器窗口 18
1.3 利用Visual C++6.0编写C++程序 21
1.4 技术解惑 23
1.4.1 学习C++是否有用 23
1.4.2 解决Windows 7安装Visual C++6.0的兼容性问题 23
1.4.3 怎样学好编程 25
第2章 C++的基本语法 26
2.1 面向对象 27
2.1.1 什么是OOP 27
2.1.2 面向对象编程 27
2.2 分析C++的程序结构 28
2.2.1 从一段代码看C++程序结构 28
2.2.2 C++的文件组织 29
2.3 必须遵循的编码规范 30
2.3.1 养成良好的习惯 30
2.3.2 必须使用的注释 31
2.4 输入/输出基础 31
2.4.1 标准输入与输出对象 31
2.4.2 一个使用I/O库的程序 32
2.5 标识符 33
2.5.1 C++中的保留字 33
2.5.2 需要遵循的命名规则 34
2.6 数据类型 35
2.6.1 数字型 36
2.6.2 逻辑运算型 36
2.6.3 字符型和字符串 37
2.7 变量 38
2.7.1 定义变量 38
2.7.2 声明变量 39
2.7.3 变量的作用域 40
2.8 常量 42
2.8.1 什么是常量 43
2.8.2 常量的分类 43
2.8.3 常量的应用 45
2.9 技术解惑 46
2.9.1 C++标识符的长度 46
2.9.2 字符和字符串的区别 46
2.9.3 C++字符串和C字符串的转换 46
2.9.4 C++字符串和字符串结束标志 46
2.9.5 C++中的面向对象、C中的面向过程的含义 47
2.9.6 面向对象和面向过程的区别 47
2.9.7 C++中常量的命名 48
2.9.8 在C++程序中如何定义常量 48
2.9.9 使用关键字const注意事项 48
2.9.10 关于全局变量的初始化,C语言和C++是否有区别 48
2.9.11 C/C++变量在内存中的分布 49
2.9.12 静态变量的初始化顺序 49
第3章 运算符和表达式 50
3.1 运算符 51
3.1.1 赋值运算符 51
3.1.2 算术运算符 52
3.1.3 比较运算符 52
3.1.4 逻辑运算符 53
3.1.5 ++/--运算符 53
3.1.6 位运算符 54
3.1.7 求字节数运算符 55
3.1.8 条件运算符 55
3.1.9 逗号运算符 56
3.2 表达式详解 57
3.2.1 表达式概述 57
3.2.2 类型转换 57
3.3 技术解惑 60
3.3.1 避免运算结果溢出的一个方案 60
3.3.2 运算符重载的权衡 60
3.3.3 运算符的优先级和结合性 60
3.3.4 C/C++表达式的限制 62
3.3.5 表达式的真正功能 62
第4章 流程控制语句 63
4.1 最简单的语句和语句块 64
4.1.1 最简单的语句 64
4.1.2 语句块 64
4.1.3 语句的总结 66
4.2 最常见的顺序结构 67
4.3 选择结构 67
4.3.1 单分支结构语句 68
4.3.2 双分支结构语句 68
4.3.3 多分支结构语句 70
4.4 循环结构 73
4.4.1 for语句 73
4.4.2 while语句 75
4.4.3 do-while语句 77
4.5 跳转语句 78
4.5.1 break语句 78
4.5.2 continue语句 78
4.5.3 goto语句 79
4.6 技术解惑 80
4.6.1 循环中断问题 80
4.6.2 分析循环语句的效率 80
4.6.3 几种循环语句的比较 81
4.6.4 在C++中,for循环该怎么读 81
4.6.5 一个C++循环结构嵌套的问题 81
4.6.6 break语句和continue语句的区别 82
第5章 其他数据类型 83
5.1 指针 84
5.1.1 什么是指针 84
5.1.2 定义指针的方式 84
5.1.3 指针的分类 86
5.1.4 指针的初始化 86
5.1.5 指针运算 88
5.1.6 指针的指针 89
5.1.7 使用指针 90
5.1.8 分析指针和引用的关系 92
5.1.9 特殊的指针 92
5.2 数组 93
5.2.1 数组基础 93
5.2.2 动态数组 95
5.2.3 数组存储 95
5.2.4 字符数组 96
5.2.5 数组初始化 96
5.2.6 指针和数组 97
5.2.7 使用数组 98
5.3 枚举 98
5.3.1 枚举基础 99
5.3.2 使用枚举 101
5.4 结构体 102
5.4.1 定义结构体 102
5.4.2 指向结构的指针 102
5.4.3 使用结构体 103
5.5 联合 104
5.6 自定义的型 105
5.6.1 typedef的作用 105
5.6.2 使用typedef 106
5.7 技术解惑 107
5.7.1 指针的命名规范 107
5.7.2 C++中指针和引用的区别 107
5.7.3 变量在语言中的实质 108
5.7.4 C++开发中如何避免和解决野指针 109
5.7.5 字符数组和字符串是否可以相互转换 110
5.7.6 静态数组的速度是否快于动态数组 110
5.7.7 Arrays与Vector的区别 111
5.7.8 数组名不是指针 111
5.7.9 用户自定义类型所占用的内存空间 111
第6章 函数 113
6.1 函数基础 114
6.1.1 定义函数的方式 114
6.1.2 函数分类 114
6.1.3 函数定义实例 117
6.2 函数的参数 119
6.2.1 形参和实参 119
6.2.2 使用数组作为函数参数 120
6.3 返回值和返回语句 121
6.4 调用函数 121
6.5 函数递归 122
6.6 指向函数的指针 123
6.7 将函数作为参数 124
6.8 变量的作用域和生存期 125
6.8.1 变量作用域 125
6.8.2 静态存储变量和动态存储变量 126
6.9 技术解惑 129
6.9.1 用typedef定义一个函数指针类型 129
6.9.2 const关键字在函数中的作用 130
6.9.3 C++函数的内存分配机制 130
6.9.4 主函数和子函数 131
6.9.5 函数声明和函数定义的区别 131
第7章 类和封装 132
7.1 类 133
7.1.1 声明类 133
7.1.2 类的属性 134
7.1.3 类的方法 134
7.1.4 构造函数 135
7.1.5 析构函数 136
7.1.6 静态成员 137
7.1.7 友元 139
7.1.8 修饰符 140
7.1.9 指向类成员的指针 141
7.1.10 嵌套类 142
7.1.11 类文件的组织 142
7.2 对象 143
7.2.1 定义对象 143
7.2.2 使用对象 143
7.2.3 this指针 144
7.3 技术解惑 144
7.3.1 浅拷贝和深拷贝 144
7.3.2 构造函数的错误认识和正确认识 145
7.3.3 保护性析构函数的作用 146
第8章 创建MFC应有程序 148
8.1 创建应用程序向导 149
8.1.1 MFC应用程序开发流程 149
8.1.2 使用程序向导生成的文件 153
8.2 Class Wizard详解 162
8.2.1 初识Class Wizard 162
8.2.2 添加类 165
8.2.3 添加类成员变量 166
8.2.4 添加消息响应函数 168
8.2.5 覆盖虚拟函数 170
8.3 程序调试 170
8.3.1 查找源程序的语法错误 170
8.3.2 Debug调试 171
8.4 技术解惑 173
8.4.1 Class Wizard不能正常工作的解决办法 173
8.4.2 如何在调试过程中查看输出信息 173
8.4.3 MFC中的异常开销问题 174
第9章 对话框 175
9.1 对话框的概念 176
9.1.1 基于对话框的应用程序 176
9.1.2 对话框类CDialog 177
9.1.3 对话框数据交换与验证 177
9.2 使用对话框 179
9.2.1 对话框的分类 179
9.2.2 创建对话框 179
9.2.3 编辑对话框 180
9.3 公用对话框 182
9.3.1 类CColorDialog 183
9.3.2 类CFileDialog 184
9.3.3 类CFindReplaceDialog 185
9.3.4 类CFontDialog 186
9.3.5 类CPrintDialog 186
9.4 消息对话框 188
9.5 技术解惑 189
9.5.1 是否可以把一个对话框的控件复制到另一个对话框中 189
9.5.2 如何保存编辑框中的内容 190
9.5.3 解决MFC生成的exe程序不能在其他计算机上运行的问题 190
第10章 控件 192
10.1 标准控件 193
10.1.1 Windows标准控件 193
10.1.2 不能发送消息的静态控件 194
10.1.3 编辑框控件 196
10.1.4 按钮 200
10.1.5 列表框 203
10.1.6 组合框 208
10.1.7 滚动条 211
10.2 公共控件 213
10.2.1 标签控件与属性表 213
10.2.2 图像列表 215
10.2.3 列表视图控件 216
10.2.4 树视图控件 217
10.3 技术解惑 223
10.3.1 如何绘制按钮 223
10.3.2 MFC控件消息 223
10.3.3 显示或隐藏控件 224
第11章 文档和视图 225
11.1 剖析文档与视图结构 226
11.1.1 文档与视图结构 226
11.1.2 文档与视图之间的关系 226
11.1.3 多文档 227
11.1.4 创建单文档应用程序 228
11.2 设计菜单 229
11.2.1 建立菜单资源 229
11.2.2 添加菜单命令处理函数 229
11.2.3 弹出式菜单 231
11.3 鼠标响应处理 233
11.3.1 鼠标消息 234
11.3.2 添加鼠标消息响应函数 234
11.4 工具栏和状态栏设计 235
11.4.1 定制工具栏 235
11.4.2 定制状态栏 237
11.5 对文档进行读写 238
11.5.1 时髦的序列化工作 239
11.5.2 MFC应用程序的序列化 239
11.6 使用不同的视图 241
11.6.1 滚动视图 241
11.6.2 多视图 243
11.7 技术解惑 247
11.7.1 模板、文档、视图和框架的关系 247
11.7.2 模板、文档、视图和框架的相互访问 247
11.7.3 文档和视图的关系 248
第12章 图形图像编程 249
12.1 图形设备接口 250
12.1.1 GDI接口基础 250
12.1.2 GDI坐标系和映射模式 251
12.1.3 颜色和颜色设置 252
12.2 绘制图形 252
12.2.1 GDI对象 252
12.2.2 创建和使用画笔 253
12.2.3 创建和使用画刷 254
12.2.4 绘制基本图形 256
12.3 文本与字体 257
12.3.1 字体的概念 257
12.3.2 创建字体 258
12.3.3 “字体”对话框 259
12.3.4 绘制文本 261
12.4 位图、图标和光标 261
12.4.1 位图 262
12.4.2 图标 267
12.4.3 光标 268
12.5 读写、显示图像文件 270
12.5.1 剖析BMP图像文件 270
12.5.2 读写BMP图像文件 272
12.5.3 显示BMP图像 274
12.5.4 多层图像的合成 276
12.6 技术解惑 278
12.6.1 MFC显示位图的方法 278
12.6.2 制作图形按钮的通用方法 279
12.6.3 在MFC中设置背景颜色方法 279
12.6.4 百页窗效果 280
第13章 动态链接库 281
13.1 动态链接库基础 282
13.2 动态链接库的创建及调用 283
13.2.1 非MFC动态库 284
13.2.2 常规动态库 285
13.2.3 扩展动态库 289
13.3 技术解惑 290
13.3.1 DLL的编制与具体的编程语言及编译器无关 290
13.3.2 MFC中的动态链接库是否必须是动态链接 291
13.3.3 动态链接到MFC的规则DLL 291
第14章 使用ActiveX控件 292
14.1 组件与ActiveX控件 293
14.2 创建ActiveX控件 294
14.2.1 使用MFC创建ActiveX控件 294
14.2.2 测试ActiveX控件 296
14.2.3 添加事件 296
14.2.4 添加属性 299
14.3 调用ActiveX控件 303
14.3.1 MFC应用程序调用ActiveX控件 304
14.3.2 在Web页面调用ActiveX控件 305
14.4 技术解惑 305
14.4.1 将ActiveX控件标记为安全 305
14.4.2 ActiveX控件的自注册问题 307
第15章 数据库技术 308
15.1 Windows数据库解决方案 309
15.1.1 常见的数据库管理系统 309
15.1.2 常见的数据库访问接口 310
15.1.3 数据库操作语言SQL 312
15.2 ADO访问技术 314
15.2.1 ADO数据库访问模型 314
15.2.2 ADO数据库访问步骤 316
15.2.3 使用ADO访问Access数据库 317
15.3 ODBC访问技术 322
15.3.1 MFC ODBC数据库访问类 323
15.3.2 MFC ODBC数据库访问技术 326
15.3.3 DBGrid控件的使用 333
15.4 技术解惑 335
15.4.1 数据库与MFC的连接问题 335
15.4.2 滚动记录的方法 336
15.4.3 数据模型、概念模型和关系数据模型 336
第16章 多线程 338
16.1 认识多线程 339
16.1.1 线程与进程 339
16.1.2 线程的优先级 339
16.1.3 线程同步 340
16.2 Win32 API多线程编程 340
16.2.1 编写线程函数 340
16.2.2 创建一个线程 340
16.2.3 终止线程 342
16.2.4 设置线程优先级 343
16.2.5 线程的挂起与恢复 343
16.2.6 线程同步 343
16.3 多线程编程 346
16.3.1 工作线程的创建与使用 346
16.3.2 创建与使用用户界面线程 347
16.3.3 线程同步 348
16.3.4 线程通信 353
16.4 技术解惑 354
16.4.1 Visual C++6.0线程同步的问题 354
16.4.2 线程和标准的Windows主程序的关系 355
16.4.3 线程安全的本质 355
第17章 网络编程技术 356
17.1 认识Windows Socket 357
17.1.1 分析网络通信基本流程 357
17.1.2 搭建开发环境 357
17.1.3 几种常用的数据结构 358
17.1.4 需要了解的两个概念 358
17.2 流式套接字 358
17.2.1 流式套接字编程模型 359
17.2.2 利用流式套接字传输数据文件 362
17.3 数据报套接字编程 365
17.3.1 编程模型 365
17.3.2 传输消息 366
17.4 实现局域网内IP多播 367
17.4.1 IP多播 367
17.4.2 实现多播通信 370
17.5 利用MFC进行套接字编程 372
17.5.1 CAsyncSocket和CSocket组合 372
17.5.2 利用类CSocket实现一个局域网通信软件 373
17.6 WinInet类 376
17.6.1 MFC的WinInet类 376
17.6.2 利用类WinInet编写互联网客户端程序 377
17.7 技术解惑 380
17.7.1 TCP/IP体系结构 380
17.7.2 客户机/服务器模式介绍 381
第18章 多媒体编程 382
18.1 控制接口 383
18.1.1 常见的几种多媒体类型 383
18.1.2 最基本的媒体控制接口 383
18.1.3 MCIWnd窗口类 386
18.2 使用MFC控件实现多媒体编程 388
18.2.1 Active Movie Control Object基础 389
18.2.2 用ActiveX控件播放媒体信息 390
18.3 使用OpenGL实现三维程序 391
18.3.1 OpenGL初步 392
18.3.2 OpenGL三维程序设计 394
18.4 技术解惑 397
18.4.1 音频编码和解码技术 397
18.4.2 探讨像素格式 398
第19章 注册表编程其实很简单 399
19.1 Windows注册表印象 400
19.2 常用的几个函数 401
19.2.1 创建键函数RegCreateKeyEx 401
19.2.2 打开键函数RegOpenKeyEx 404
19.2.3 读取键值函数RegQueryValueEx 404
19.2.4 设置键值函数RegSetValueEx 406
第20章 仿QQ通信工具 408
20.1 需求分析 409
20.1.1 总体设计 409
20.1.2 文件概述 411
20.2 服务器端编码 412
20.2.1 设计服务器界面 412
20.2.2 用户信息管理模块 412
20.2.3 客户端请求信息处理 415
20.2.4 系统群消息发送功能 417
20.3 客户端编码 418
20.3.1 客户端界面设计 418
20.3.2 基本信息与消息设计 419
20.3.3 线程函数的设计与实现 420
20.3.4 与服务器端的交互功能 422
20.3.5 客户端之间的交互 425
20.4 系统调试 429
第21章 专业理财系统 430
21.1 系统分析 431
21.1.1 需求分析 431
21.1.2 可行性分析 431
21.2 系统设计 431
21.2.1 系统目标 431
21.2.2 系统模块结构 432
21.3 设计数据结构 432
21.3.1 设计数据库 433
21.3.2 设计系统框架 434
21.4 前期编码 437
21.4.1 用户管理模块 438
21.4.2 收支信息模块 442
21.5 后期编码 449
21.5.1 设计界面 449
21.5.2 编码实现 449
21.6 项目调试 452