第1篇 新手入门 2
第1章 Visual C++ 6.0开发环境 2
1.1 Visual C++++ 6.0概述 3
1.2 熟悉Visual C++++ 6.0开发环境 3
1.2.1 菜单介绍 4
1.2.2 工具栏介绍 10
1.2.3 工作区介绍 11
1.2.4 代码编辑窗口介绍 13
1.2.5 控件面板介绍 14
1.2.6 Output(输出)窗口介绍 14
1.3 定制Visual C++++ 6.0开发环境 15
1.3.1 设计自己的工具栏窗口 15
1.3.2 调整代码文本颜色 16
1.3.3 批量注释 17
1.4 使用MSDN帮助工具 20
1.5 创建工程 21
1.5.1 创建一个简单的工程 21
1.5.2 设计程序界面 23
1.5.3 为控件关联成员变量 24
1.5.4 编写程序代码 25
1.5.5 编译并运行工程 25
1.5.6 发布应用程序 25
1.6 小结 26
第2章 程序设计基础 27
2.1 程序设计基本要素 28
2.1.1 标识符 28
2.1.2 关键字 28
2.1.3 常量 29
2.1.4 变量 29
2.1.5 寄存器变量 30
2.1.6 静态变量 31
2.1.7 外部变量 31
2.1.8 自动变量 32
2.1.9 注释 32
2.2 数据类型 33
2.2.1 简单数据类型 33
2.2.2 布尔类型 35
2.2.3 数组类型 35
2.2.4 枚举类型 37
2.2.5 结构体类型 38
2.2.6 共用体类型 41
2.2.7 指针类型 41
2.2.8 引用类型 46
2.2.9 类型别名 47
2.3 类型转换 47
2.3.1 数值类型转换 47
2.3.2 静态转换 48
2.3.3 动态转换 48
2.3.4 常量转换 49
2.3.5 重解释转换 50
2.3.6 数值类型与字符串之间的转换 50
2.4 运算符 52
2.4.1 赋值运算符 52
2.4.2 算术运算符 53
2.4.3 关系运算符和逻辑运算符 54
2.4.4 递增递减运算符 56
2.4.5 位运算符 56
2.4.6 sizeof运算符 59
2.4.7 new和delete运算符 61
2.4.8 优先级 61
2.5 表达式 63
2.5.1 逗号表达式 63
2.5.2 条件表达式 63
2.6 实战 64
2.6.1 绘制余弦曲线 64
2.6.2 使用带参数的宏定义求两个整数的乘积 65
2.6.3 定义操作员信息结构体 65
2.6.4 数鸭子问题求解 66
2.6.5 字符串加密与解密 67
2.6.6 输出系统日期和时间 69
2.7 小结 70
2.8 学习成果检验 70
第3章 流程控制 71
3.1 简单语句 72
3.2 复合语句 72
3.3 分支语句 74
3.3.1 if条件语句 74
3.3.2 switch分支语句 77
3.4 循环语句 81
3.4.1 for循环语句 81
3.4.2 while循环语句 84
3.4.3 do while循环语句 85
3.5 跳转语句 86
3.5.1 goto语句 86
3.5.2 return语句 87
3.5.3 exit语句 88
3.6 实战 89
3.6.1 促销商品的折扣计算 89
3.6.2 购物街中的商品价格竞猜 90
3.6.3 上帝创世的秘密 91
3.6.4 求灯塔数量 92
3.6.5 统计学生成绩的最高分、最低分和平均值 93
3.6.6 解析字符串 95
3.7 小结 96
3.8 学习成果检验 96
第4章 函数 97
4.1 函数的定义 98
4.1.1 函数的声明和定义 98
4.1.2 函数的调用 100
4.2 函数参数 100
4.2.1 默认值参数 101
4.2.2 const参数 101
4.2.3 指针/引用参数 102
4.2.4 数组参数 103
4.2.5 内联函数 106
4.3 重载函数 106
4.3.1 定义重载函数 107
4.3.2 隐藏重载函数 108
4.4 函数递归调用 110
4.5 函数指针 111
4.6 函数模板 112
4.6.1 函数模板应用 112
4.6.2 重载函数模板 113
4.7 作用域和生命期 114
4.7.1 局部作用域 114
4.7.2 全局作用域 116
4.7.3 命名空间 116
4.8 实战 120
4.8.1 通过函数输出存储在数组中的商品信息 120
4.8.2 通过函数回调输出查找数据 121
4.8.3 在数组中查找指定数据并通过参数返回数据索引 122
4.8.4 遍历磁盘目录 123
4.8.5 数值排序 125
4.9 小结 126
4.1 0学习成果检验 126
第5章 类和对象 127
5.1 面向对象程序设计 128
5.1.1 面向对象技术产生的背景 128
5.1.2 面向对象的主要特征 128
5.2 类的定义 129
5.3 类的实例化——对象 130
5.4 构造函数和析构函数 133
5.4.1 构造函数 133
5.4.2 复制构造函数 135
5.4.3 析构函数 137
5.5 特殊的类成员 138
5.5.1 常量成员 138
5.5.2 静态成员 139
5.5.3 隐藏的this指针 140
5.6 特殊的成员函数 142
5.6.1 内联成员函数 142
5.6.2 静态成员函数 144
5.6.3 重载成员函数 145
5.7 类成员指针 147
5.7.1 类成员函数指针 147
5.7.2 类数据成员指针 148
5.8 继承 149
5.8.1 单继承 149
5.8.2 虚函数与动态绑定 152
5.8.3 抽象类 154
5.8.4 类型转换 155
5.8.5 多继承 157
5.8.6 虚继承 159
5.9 运算符重载 161
5.9.1 构造函数自动转换与禁止 161
5.9.2 运算符重载 162
5.1 0友元函数和友元类 164
5.1 1类域 167
5.1 2嵌套类 170
5.1 3局部类 172
5.1 4类模板 172
5.1 4.1 应用类模板 172
5.1 4.2 类模板中的静态数据成员 177
5.1 5 异常处理 178
5.1 5.1 异常捕捉 178
5.1 5.2 抛出异常 179
5.1 6实战 181
5.1 6.1 递归遍历二叉树 181
5.1 6.2 循环遍历二叉树 184
5.1 6.3 统计图书的销量 189
5.1 6.4 计算几何图形的面积 190
5.1 6.5 对动物的行为实现多态 191
5.1 6.6 通过构造函数初始化学生信息 192
5.1 7小结 193
5.1 8学习成果检验 193
第6章 综合实例(一)——实现登录对话框 194
6.1 开发背景 195
6.2 系统功能描述 195
6.3 系统分析 195
6.3.1 需求分析 195
6.3.2 技术分析 195
6.4 系统实现过程 195
6.5 小结 197
6.6 学习成果检验 197
第2篇 进阶提高 200
第7章 对话框程序设计 200
7.1 创建对话框应用程序 201
7.2 创建对话框 202
7.2.1 设计对话框资源 202
7.2.2 创建并显示对话框 205
7.3 设置对话框属性 208
7.3.1 使用属性窗口设置对话框属性 209
7.3.2 使用代码设置对话框属性 213
7.4 对话框布局 214
7.4.1 向对话框中添加控件 214
7.4.2 调整控件的Tab键顺序 215
7.4.3 调整控件至相同的大小 216
7.4.4 在对话框中对齐控件 217
7.4.5 排列控件 220
7.4.6 使用网格线进行界面布局 223
7.4.7 测试对话框布局效果 224
7.5 访问对话框中的控件 224
7.5.1 使用类向导为控件关联变量 225
7.5.2 利用控件ID获取控件窗口指针 227
7.5.3 利用数据交换访问控件文本数据 228
7.6 设置对话框和应用程序图标 229
7.7 添加对话框成员和成员函数 231
7.7.1 添加成员和成员函数 231
7.7.2 添加消息处理函数 234
7.7.3 手动添加命令消息处理函数 235
7.8 使用消息对话框 236
7.9 Windows通用对话框 237
7.9.1 “文件”对话框 237
7.9.2 “查找”/“替换”对话框 238
7.9.3 “字体”对话框 239
7.9.4 “颜色”对话框 240
7.9.5 “打印”对话框 240
7.1 0实战 241
7.1 0.1 隐藏和显示标题栏 242
7.1 0.2 在对话框中设置控件的提示信息 242
7.1 0.3 如QQ般隐藏的窗体 244
7.1 0.4 遍历对话框中的控件 244
7.1 0.5 应用程序背景与桌面融合 245
7.1 0.6 获取系统磁盘信息 246
7.1 1小结 248
7.1 2学习成果检验 248
第8章 MFC通用控件 249
8.1 编辑框控件EditBox 250
8.1.1 获取/设置编辑框文本 250
8.1.2 设置字体和文本颜色 250
8.1.3 设置密码框 251
8.1.4 设置只读编辑框 251
8.1.5 编辑框多行显示文本 252
8.2 静态文本控件StaticText 252
8.2.1 设置控件文本 252
8.2.2 响应鼠标单击事件 253
8.3 按钮控件Button 254
8.3.1 设置按钮单击事件 254
8.3.2 设置图标按钮 255
8.4 复选框控件CheckBox 256
8.4.1 设置和取消复选框选中状态 256
8.4.2 使用复选框统计个人爱好 257
8.5 单选按钮控件RadioButton 258
8.5.1 为单选按钮设置分组 258
8.5.2 利用单选按钮确定用户的选择 259
8.6 组合框控件ComboBox 260
8.6.1 设置组合框风格 260
8.6.2 调整组合框列表部分大小 261
8.6.3 向组合框中插入数据 261
8.6.4 获取用户选择的数据 262
8.6.5 设置组合框默认显示的数据 262
8.7 列表框控件ListBox 263
8.7.1 向列表框中插入文本 263
8.7.2 为列表框中的项目添加复选功能 264
8.7.3 同时选择多个项目 265
8.8 图像控件Picture 265
8.8.1 使用属性窗口显示位图 266
8.8.2 动态加载位图 266
8.9 实战 267
8.9.1 利用图像控件实现公交线路模拟 267
8.9.2 设计媒体播放器 270
8.9.3 上下移动列表项位置 271
8.9.4 具有分隔条的静态文本控件 272
8.9.5 自动调整组合框宽度 273
8.9.6 金额编辑器 274
8.1 0小结 275
8.1 1学习成果检验 275
第9章 MFC高级控件 276
9.1 图像列表控件ImageList 277
9.1.1 创建图像列表 277
9.1.2 使用图像列表绘图 278
9.2 列表视图控件ListControl 279
9.2.1 设置列表视图控件风格 280
9.2.2 使用列表视图设计登录界面 280
9.2.3 设置列表视图背景位图 281
9.2.4 使用列表视图显示表格数据 283
9.3 树视图控件TreeControl 284
9.3.1 设置树视图控件属性 284
9.3.2 使用树视图控件显示区域信息 285
9.3.3 修改树视图控件的文本颜色 286
9.3.4 设置复选功能的树视图控件 286
9.4 进度条控件Progress 290
9.5 滑块控件Slider 291
9.5.1 滑块控件属性设置 292
9.5.2 使用滑块控件设置颜色 293
9.6 标签控件TabControl 294
9.6.1 标签控件属性设置 295
9.6.2 使用标签控件设计多页面窗口 296
9.6.3 显示图标的标签控件 298
9.7 实战 299
9.7.1 删除学生信息 299
9.7.2 对位图文件进行批量编号命名 302
9.7.3 Loading窗口中的进度的百分比显示 304
9.7.4 在列表中编辑文本 305
9.7.5 QQ抽屉控件 306
9.7.6 树控件的背景设计 307
9.8 小结 308
9.9 学习成果检验 308
第10章 菜单、工具栏和状态栏设计 309
10.1 菜单设计 310
10.1.1 设计菜单资源 310
10.1.2 菜单项命令处理 312
10.1.3 动态创建菜单 313
10.1.4 禁用/启用菜单项 315
10.1.5 设计弹出式菜单 317
10.1.6 设计位图菜单 318
10.2 工具栏设计 321
10.2.1 工具栏资源设计 321
10.2.2 工具栏按钮命令处理 324
10.2.3 动态创建工具栏 324
10.2.4 为工具栏设置工具提示功能 328
10.3 状态栏设计 329
10.3.1 创建状态栏 329
10.3.2 在状态栏中显示进度条 331
10.4 实战 332
10.4.1 设计学生管理系统主界面 332
10.4.2 设计任务栏托盘菜单 334
10.4.3 多国语言菜单 336
10.4.4 使用更新机制控制菜单可用性 337
10.4.5 带历史信息的菜单 338
10.4.6 滚动字幕的状态栏 338
10.5 小结 339
10.6 学习成果检验 339
第11章 综合实例(二)——QQ登录式的用户选择列表 340
11.1 开发背景 341
11.2 系统功能描述 341
11.3 系统分析 341
11.3.1 需求分析 341
11.3.2 技术分析 341
11.4 系统实现过程 341
11.5 小结 342
11.6 学习成果检验 343
第3篇 中级开发 346
第12章 文本、图形图像处理技术 346
12.1 图形设备接口 347
12.1.1 设备上下文DC 347
12.1.2 GDI对象 348
12.2 对话框窗口区域 349
12.3 文本输出 350
12.3.1 在指定区域中输出文本 350
12.3.2 输出指定字体和颜色文本 352
12.3.3 在通道中输出文本 354
12.3.4 在图像背景上输出透明文本 355
12.4 绘制图形 356
12.4.1 绘制五子棋表格 356
12.4.2 绘制多边形 357
12.4.3 绘制控件外观 358
12.4.4 填充区域 359
12.5 图像输出 361
12.5.1 在窗口中输出位图资源 361
12.5.2 显示磁盘中的位图文件 363
12.5.3 在窗口非客户区域输出位图 365
12.5.4 位图文件结构分析 367
12.5.5 使用位图数据直接绘图 368
12.5.6 显示JPEG格式图像 370
12.6 GDI+图像处理技术 373
12.6.1 在程序中使用GDI+ 373
12.6.2 使用GDI+显示GIF动画 373
12.6.3 使用GDI+实现图像水印效果 376
12.7 实战 378
12.7.1 设计具有图片滚动功能的浏览器 378
12.7.2 设计字形窗体的程序启动界面 381
12.7.3 绘制圆角按钮 383
12.7.4 绘制渐变颜色的文字 384
12.7.5 模拟时钟 385
12.7.6 数字验证 386
12.8 小结 387
12.9 学习成果检验 387
第13章 打印技术 388
13.1 打印基础知识 389
13.1.1 打印机介绍 389
13.1.2 分辨率 389
13.1.3 映射模式 389
13.2 打印输出 390
13.2.1 获取打印机设备上下文 391
13.2.2 打印文本信息 391
13.2.3 打印图像 393
13.3 打印控制 395
13.3.1 控制打印方向 396
13.3.2 设置打印纸大小 398
13.4 实战 399
13.4.1 实现工作证打印 399
13.4.2 打印对话框及其控件中的数据 402
13.4.3 具有滚动条的预览界面 403
13.4.4 设置打印表格的边线及字体 406
13.4.5 实现照片的打印 408
13.4.6 实现商品销售图表的打印 409
13.5 小结 410
13.6 学习成果检验 410
第14章 文件操作 411
14.1 使用C函数进行文件操作 412
14.1.1 读取文件信息 412
14.1.2 写入文件信息 413
14.1.3 定位文件 415
14.2 使用CFile类进行文件操作 416
14.2.1 读取文件信息 416
14.2.2 写入文件信息 418
14.2.3 定位文件 419
14.2.4 文件异常处理 421
14.3 文件管理 423
14.3.1 获取文件属性信息 423
14.3.2 查找文件 425
14.3.3 复制文件 427
14.3.4 删除文件 429
14.4 INI文件操作 430
14.4.1 INI文件结构解析 430
14.4.2 读写INI文件 430
14.5 注册表操作 433
14.5.1 使用函数直接读写注册表 434
14.5.2 使用CRegKey类读写注册表 437
14.6 实战 439
14.6.1 复制文件过程中显示进度条 439
14.6.2 设置开机自动运行 441
14.6.3 重命名文件 443
14.6.4 列举文件夹下的所有文件 445
14.6.5 批量删除指定类型的文件 446
14.7 小结 447
14.8 学习成果检验 447
第15章 程序调试 448
15.1 断点跟踪 449
15.1.1 设计简单断点 449
15.1.2 设置数据断点 450
15.1.3 设置条件断点 450
15.1.4 设置消息断点 451
15.2 调试窗口 452
15.2.1 Watch窗口 452
15.2.2 Call Stack窗口 454
15.2.3 Memory窗口 455
15.2.4 Variables窗口 456
15.2.5 Registers窗口 456
15.2.6 Disassembly窗口 457
15.3 宏调试技术 458
15.3.1 应用TRACE宏输出信息 458
15.3.2 应用ASSERT宏诊断条件是否成立 459
15.4 内存泄露检查 459
15.5 小结 460
第16章 综合实例(三)——垃圾文件清理工具 461
16.1 开发背景 462
16.2 系统功能描述 462
16.3 系统技术分析 462
16.4 系统实现过程 463
16.5 小结 465
16.6 学习成果检验 465
第4篇 高级开发 468
第17章 ADO数据库编程 468
17.1 数据库概述 469
17.1.1 数据库发展历史 469
17.1.2 关系型数据库 470
17.2 ADO技术 470
17.2.1 ADO概述 470
17.2.2 在工程中使用ADO技术 471
17.3 ADO对象 471
17.3.1 ADO连接对象 471
17.3.2 ADO记录集对象Recordset 473
17.3.3 ADO命令对象Command 476
17.4 实战 478
17.4.1 使用ActiveX控件连接数据库 478
17.4.2 使用ADO对象向数据库添加数据 480
17.4.3 使用SQL语句修改和删除数据库中的数据 482
17.4.4 在应用程序中使用事务 484
17.4.5 对Access数据库进行录入和提取图片 485
17.4.6 读取SQL Server数据库结构 488
17.5 小结 489
17.6 学习成果检验 489
第18章 多线程应用程序设计 490
18.1 线程概述 491
18.1.1 线程的定义 491
18.1.2 线程与进程的关系 491
18.2 线程的创建 491
18.2.1 使用CreateThread函数创建线程 492
18.2.2 使用_beginthread函数创建线程 493
18.2.3 使用AfxBeginThread函数创建线程 494
18.3 线程的调度 497
18.3.1 挂起线程 497
18.3.2 唤醒线程 498
18.3.3 终止线程 499
18.4 线程同步 500
18.4.1 线程同步的必要性 500
18.4.2 使用事件对象实现线程同步 501
18.4.3 使用互斥对象实现线程同步 503
18.4.4 使用信标对象实现线程同步 505
18.4.5 使用关键代码段实现线程同步 506
18.5 线程池 508
18.5.1 异步调用函数 508
18.5.2 依据指定的时间间隔调用函数 510
18.6 实战 512
18.6.1 使用多线程实现临时文件清理 512
18.6.2 使用多线程实现任务列表管理 518
18.6.3 在自己的应用程序中调用QQ 524
18.6.4 利用多线程实现文件查找 525
18.6.5 利用闪屏线程设计启动界面 526
18.6.6 统计文本文件中汉字与字符的个数 527
18.7 小结 528
18.8 学习成果检验 528
第19章 动态链接库 529
19.1 动态链接库基础 530
19.1.1 动态链接库的特点 530
19.1.2 查看动态链接库 530
19.2 创建和访问动态链接库 531
19.2.1 创建通用的动态链接库 531
19.2.2 访问动态链接库 533
19.2.3 向动态链接库中添加类和资源 534
19.2.4 访问动态链接库中的类和资源 535
19.3 移花接木——函数转发器 537
19.4 实战 537
19.4.1 使用动态链接库设计支持多国语言的应用程序 538
19.4.2 利用动态链接库实现界面换肤 541
19.4.3 判断闰年 542
19.4.4 格式化磁盘 543
19.4.5 提取并保存应用程序图标 544
19.4.6 获取CPU的ID值 545
19.5 小结 547
19.6 学习成果检验 547
第20章 网络编程 548
20.1 计算机网络基础 549
20.1.1 计算机网络发展历史 549
20.1.2 OSI参考模型 549
20.1.3 IP地址 550
20.1.4 域名 550
20.1.5 地址解析 551
20.1.6 TCP/IP协议 551
20.1.7 端口 553
20.2 套接字编程基础 553
20.2.1 套接字概述 553
20.2.2 套接字阻塞模式 553
20.2.3 字节顺序 554
20.2.4 套接字I/O模型 554
20.3 套接字函数 567
20.3.1 套接字函数介绍 567
20.3.2 设计简单的网络聊天程序 570
20.4 MFC套接字编程 577
20.4.1 CAsyncSocket类 577
20.4.2 CSocket类 580
20.4.3 设计多人对话的网络聊天室 581
20.5 实战 585
20.5.1 设计信息广播应用程序 586
20.5.2 设计文件发送应用程序 588
20.5.3 获取本机用户名和IP地址 603
20.5.4 实现Ping命令 603
20.5.5 通过UDP协议发送消息 606
20.6 小结 608
20.7 学习成果检验 608
第21章 综合实例(四)——局域网监控系统 609
21.1 开发背景 610
21.2 系统功能描述 610
21.3 系统技术分析 610
21.4 系统实现过程 611
21.5 小结 614
21.6 学习成果检验 614
第5篇 项目实战 616
第22章 学生管理系统 616
22.1 开发背景 617
22.2 系统分析 617
22.2.1 需求分析 617
22.2.2 系统功能描述 617
22.3 系统设计 617
22.3.1 系统目标 617
22.3.2 系统功能结构 618
22.3.3 系统预览 618
22.3.4 业务流程图 619
22.3.5 数据库设计 619
22.4 公共类设计 622
22.5 主窗体设计 622
22.6 科目信息管理模块设计 623
22.6.1 科目信息管理模块概述 623
22.6.2 科目信息管理模块技术分析 624
22.6.3 科目信息管理模块实现过程 624
22.7 学生信息管理模块设计 628
22.7.1 学生信息管理模块概述 628
22.7.2 学生信息管理模块技术分析 629
22.7.3 学生信息管理模块实现过程 629
22.8 学生成绩录入模块设计 632
22.8.1 学生成绩录入模块概述 632
22.8.2 学生成绩录入模块技术分析 633
22.8.3 学生成绩录入模块实现过程 633
22.9 成绩等级管理模块设计 635
22.9.1 成绩等级管理模块概述 635
22.9.2 成绩等级管理模块技术分析 635
22.9.3 成绩等级管理模块实现过程 636
22.1 0学生违规查询模块设计 641
22.1 0.1 学生违规查询模块概述 641
22.1 0.2 学生违规查询模块技术分析 642
22.1 0.3 学生违规查询模块实现过程 642
22.1 1学生成绩报表打印模块设计 645
第23章 人事考勤管理系统 649
23.1 开发背景 650
23.2 系统分析 650
23.2.1 需求分析 650
23.2.2 系统功能描述 650
23.3 系统设计 650
23.3.1 设计目标 650
23.3.2 系统功能结构 651
23.3.3 系统预览 651
23.3.4 业务流程图 652
23.3.5 数据库设计 652
23.4 公共类设计 653
23.5 主窗体设计 657
23.6 用户登录模块设计 658
23.6.1 用户登录模块概述 658
23.6.2 用户登录模块技术分析 658
23.6.3 用户登录模块实现过程 659
23.7 用户管理模块设计 659
23.7.1 用户管理模块概述 659
23.7.2 用户管理模块技术分析 660
23.7.3 用户管理模块实现过程 660
23.8 部门管理模块设计 661
23.8.1 部门管理模块概述 661
23.8.2 部门管理模块技术分析 662
23.8.3 部门管理模块实现过程 662
23.9 人员信息管理模块设计 664
23.9.1 人员信息管理模块概述 664
23.9.2 人员信息管理模块技术分析 665
23.9.3 人员信息管理模块实现过程 665
23.10考勤管理模块设计 670
23.10.1 考勤管理模块概述 670
23.10.2 考勤管理模块技术分析 670
23.10.3 考勤管理模块实现过程 671
23.11考勤汇总查询模块设计 675
23.11.1 考勤汇总查询模块概述 675
23.11.2 考勤汇总查询模块技术分析 675
23.11.3 考勤汇总查询模块实现过程 676