第1篇 开发基础篇 2
第1章 Visual C++6.0开发环境 2
1.1 Visual C++6.0概述 2
1.2 认识Visual C++集成开发环境 3
1.3 IDE菜单栏介绍 5
1.4 工具栏 12
1.5 输出窗口 13
1.6 资源编辑器 13
1.7 Visual C++学习常见问题 14
1.8 Visual C++学习方法简介 16
小结 17
第2章 利用集成开发环境生成程序 18
2.1 生成项目(project) 18
2.2 添加和编辑源文件 19
2.3 建立程序 20
2.4 运行程序 21
2.5 调试程序 21
2.6 Visual C++生成的项目文件 22
2.7 编写控制台应用程序 23
小结 25
第3章 Windows程序运行原理 26
3.1 图形界面操作系统的王者——Windows 26
3.2 什么是多任务操作系统 26
3.3 Windows应用程序的组成 28
3.4 建立API的概念 29
3.4.1 API的发展 29
3.4.2 标准Win32 API函数分类 30
3.5 一个用API编写的Windows程序 30
3.6 Visual C++应用程序开发框架:MFC 36
3.6.1 从API到MFC 36
3.6.2 MFC是一个编程框架 36
小结 37
第4章 开始使用MFC类库 38
4.1 MFC的起源和发展 38
4.2 MFC整体类库结构 39
4.3 常用MFC类简介 40
4.3.1 应用程序结构类 40
4.3.2 调试和异常类 41
4.3.3 文件服务类 41
4.3.4 图形处理类 42
4.3.5 数据库类 42
4.3.6 Internet支持类 42
4.4 一个简单的MFC程序 42
4.5 文档/视图结构 45
4.5.1 文档类 45
4.5.2 视图类 46
4.5.3 使用文档/视图结构的好处 47
4.5.4 单文档(SDI)与多文档(MDI)应用程序 47
4.6 窗口类及其控件栏 49
4.6.1 子窗口类 49
4.6.2 主窗口类 50
4.6.3 工具栏 50
4.6.4 状态栏 51
4.7 MFC创建的完整应用程序实例 51
小结 56
第5章 菜单与加速键 57
5.1 消息与事件 57
5.1.1 事件驱动机制 57
5.1.2 消息和消息映射 59
5.1.3 消息处理过程 61
5.2 菜单和加速键的创建 62
5.2.1 菜单的创建 62
5.2.2 加速键的创建 65
5.3 添加菜单所需的处理函数 66
5.3.1 添加普通菜单的处理函数 66
5.3.2 添加弹出式菜单的处理函数 67
5.4 加载加速键 71
小结 71
第6章 AppWizard和ClassWizard 72
6.1 一个简单应用程序的创建 72
6.1.1 MFC AppWizard 72
6.1.2 ClassWizard 72
6.1.3 程序实例 73
6.2 程序调试 78
6.2.1 创建调试实例程序 78
6.2.2 调试器 80
小结 83
第7章 在Windows中绘制图像 84
7.1 绘图的基础知识 84
7.1.1 映射模式 85
7.1.2 设备上下文 85
7.2 图形设备接口(GDI) 85
7.2.1 设备环境类(CDC) 85
7.2.2 GDI对象 86
7.3 简单图形的绘制 87
7.3.1 屏幕绘图的主要函数 87
7.3.2 图形绘制基本原则 88
7.3.3 画笔 89
7.3.4 画刷 91
小结 94
第2篇 关键控件篇(MFC) 96
第8章 常用界面控件 96
8.1 静态文本(Static Text)控件 96
8.1.1 传统控件通知消息 96
8.1.2 静态控件的使用 97
8.1.3 CStatic类的主要成员函数 99
8.2 文本编辑(Edit Box)控件 100
8.2.1 文本编辑控件的使用 100
8.2.2 CEdit类的主要成员函数 101
8.3 滚动条(Scroll Bar)控件 102
8.3.1 滚动条控件的使用 102
8.3.2 CScrollBar类的主要成员函数 104
8.4 按钮控件 104
8.4.1 按钮控件的使用 105
8.4.2 CButton类的主要成员函数 108
8.5 列表框(List Box)控件 109
8.5.1 列表框控件的使用 109
8.5.2 ClistBox类的主要成员函数 111
8.6 组合框(Combo box)控件 112
8.7 图片(Picturre)控件 113
8.8 列表(List Ctrl)控件 115
8.8.1 Win 32新型控件概述 115
8.8.2 列表控件的使用 116
8.8.3 ClistCtrl类的主要成员函数 117
8.9 树形(Tree Ctrl)控件 117
8.9.1 树形控件的使用 117
8.9.2 CTreeCtrl类的主要成员函数 118
8.9.3 树形控件的通知消息 119
8.10 选项卡(Tab Ctrl)控件 119
8.10.1 选项卡控件的使用 119
8.10.2 选项卡控件通知消息 120
8.10.3 选项卡控件的使用 120
8.11 应用实例:进制转换计算器 121
8.11.1 进制转换计算器功能概述 121
8.11.2 实例具体实现步骤 122
小结 129
第9章 文本和字体类 130
9.1 基础知识介绍 130
9.2 CFont类 131
9.3 文本输出过程 136
9.4 字体和文本输出实例 137
9.5 根据数据绘制相应的柱状图 140
9.6 根据坐标绘制三角形 143
小结 147
第10章 对话框 148
10.1 对话框的创建 148
10.1.1 对话框的创建流程 148
10.1.2 创建对话框资源 149
10.1.3 对话框窗口布局 150
10.1.4 创建对话框类和菜单栏制作 151
10.2 模态对话框 152
10.3 非模态对话框 153
10.4 功能代码实现 155
10.5 属性页对话框 157
10.5.1 主要相关类介绍 158
10.5.2 一般属性页对话框的创建步骤 159
10.5.3 向导对话框的创建步骤 163
10.6 通用对话框 167
10.6.1 打印设置对话框 167
10.6.2 页面设置对话框 168
10.6.3 查找对话框 168
10.6.4 文件对话框 169
10.6.5 字体对话框 170
10.6.6 颜色对话框 171
10.7 消息对话框 171
10.7.1 MessageBox()函数 172
10.7.2 AfxMessageBox()函数 172
10.8 菜单和对话框综合实例 173
10.8.1 实例描述 173
10.8.2 实例实现步骤 173
10.8.3 编写关键代码 177
10.8.4 开发经验总结与提高练习 180
小结 181
第11章 文件操作 182
11.1 串行化的基本原理 182
11.1.1 文档类 183
11.1.2 Serialize()函数 184
11.1.3 CArchive类 187
11.1.4 串行化实例 188
11.2 文件CFile类 199
11.2.1 打开操作 199
11.2.2 读写操作 201
11.2.3 定位操作 202
11.2.4 关闭操作 202
11.2.5 异常操作 204
11.2.6 管理操作 205
11.3 文件对话框 206
11.3.1 多选文件对话框 206
11.3.2 重载文件对话框 207
小结 211
第12章 学生成绩管理系统 212
12.1 学生成绩管理系统功能描述 212
12.2 项目的建立 212
12.3 关键类的创建及实现 213
12.4 开发“添加记录”对话框 225
12.5 设计“删除记录”对话框及其相应的功能 229
12.6 添加“查找记录”对话框 231
12.7 添加菜单 233
小结 237
第3篇 深入学习篇 240
第13章 动态链接库 240
13.1 动态链接库的基础知识 240
13.2 DLL的出入口函数 241
13.2.1 DllMain()函数 241
13.2.2 DLL的导出函数 242
13.3 两种链接DLL的方式 242
13.3.1 隐式链接 243
13.3.2 显式链接 245
13.4 开发DLL 246
13.4.1 创建Non-MFC Dll动态链接库 246
13.4.2 MFC AppWizard[dll]方式生成常规/扩展DLL 248
13.4.3 导出函数调用约定 248
13.4.4 模块定义文件(DEF) 250
13.5 在动态链接库中使用资源 250
13.6 界面汉化示例 253
13.7 使用钩子(Hook)函数 255
13.7.1 钩子函数的类型 255
13.7.2 使用钩子函数 257
13.7.3 鼠标钩子应用实例 258
13.7.4 键盘钩子应用实例 261
小结 265
第14章 多线程 266
14.1 多线程的基本概念 266
14.2 两种重要的线程 266
14.2.1 工作者线程 266
14.2.2 用户界面线程 267
14.3 线程的操作 268
14.3.1 线程的创建 268
14.3.2 线程的终止 269
14.3.3 线程的管理和操作 270
14.3.4 线程的同步 276
小结 279
第15章 网络编程 280
15.1 网络编程的基础知识 280
15.1.1 Socket简介 280
15.1.2 Windows套接字规范简介 281
15.2 网络应用程序基本规范 282
15.2.1 网络应用程序的基本模型 282
15.2.2 初始化 283
15.2.3 建立套接字对象 284
15.2.4 绑定地址与端口 284
15.2.5 建立通信连接 284
15.2.6 数据传输 285
15.3 WinSock类 285
15.3.1 CAsyncSocket类 285
15.3.2 CSocket类 287
15.4 客户端/服务器网络程序设计 287
15.4.1 网络编程的基本任务 287
15.4.2 客户端程序的实现 288
15.4.3 服务器端程序的实现 291
小结 294
第16章 数据库开发技术 295
16.1 概述 295
16.1.1 数据库相关技术介绍 295
16.1.2 数据库应用程序的开发步骤 297
16.1.3 选择数据库管理系统的原则 298
16.2 设计、创建和维护Access数据库 299
16.2.1 创建Access数据库 299
16.2.2 创建数据表 299
16.2.3 设计和修改数据表的结构 301
16.2.4 设置表之间的关系 302
16.2.5 编辑和管理数据表记录 303
16.3 标准的SQL语句 303
16.3.1 基本的SQL语句 304
16.3.2 数据表的联合查询技术 305
16.4 ADO的技术特点 307
16.4.1 数据库访问接口介绍 307
16.4.2 ADO的特点 307
16.5 ADO的对象和集合 307
16.5.1 连接对象 308
16.5.2 命令对象 309
16.5.3 记录集对象 310
16.5.4 ADO的集合 313
16.6 数据库操作 315
16.6.1 动态链接库的引入和COM库的初始化 315
16.6.2 ADO与数据库的连接 316
16.6.3 获得和遍历记录集 317
16.6.4 对记录的操作 317
16.7 利用ADO查询并操作数据库实例 319
小结 322
第4篇 专业项目开发篇 324
第17章 电子元器件绘制系统 324
17.1 系统背景 324
17.1.1 坐标变换和映射模式 324
17.1.2 OnPaint()和OnDraw() 326
17.2 序列化 327
17.2.1 序列化概念 327
17.2.2 序列化机制 328
17.2.3 实现类的序列化 328
17.2.4 文档/视图架构程序中数据的序列化 329
17.3 电子元器件绘制系统的需求分析 331
17.3.1 绘制功能 331
17.3.2 图形编辑功能 332
17.3.3 器件属性的编辑 333
17.4 电子绘制系统分析与详细设计 333
17.4.1 业务过程分析 334
17.4.2 抽象出来的类(类图) 335
17.4.3 其他的数据结构 342
17.4.4 器件示意图的外观比例设计 342
17.5 重点功能实现方法 344
17.5.1 绘制器件图 344
17.5.2 选择器件图 347
17.5.3 器件图的放大/缩小、单个器件图的移动 352
17.5.4 器件图的Z_Order顺序调整 353
17.5.5 复制/粘贴 354
17.5.6 鼠标形状的改变 357
17.5.7 截获Windows的消息实现多个器件图的移动 358
17.5.8 理解CObList类,以防内存泄漏 360
17.6 进阶与提高 361
小结 363
第18章 统一数据库管理系统 364
18.1 统一数据库管理系统的开发背景 364
18.2 统一数据库管理平台的用户需求 364
18.2.1 数据表管理功能 365
18.2.2 视图管理功能 366
18.2.3 存储过程管理功能 366
18.2.4 数据操作功能 367
18.2.5 SQL操作功能 368
18.3 统一数据库管理平台的分析与设计 368
18.3.1 数据库管理功能分析和设计 368
18.3.2 系统的数据结构 373
18.3.3 统一数据库管理平台的主界面 375
18.4 重点代码讲解 375
18.4.1 取得数据库的结构 375
18.4.2 动态创建数据源 379
18.4.3 创建数据库 381
18.4.4 删除数据库 382
18.4.5 存储过程的相关操作 382
18.4.6 显式调用外部DLL 383
18.4.7 取得数据库对象的脚本 384
18.4.8 Explorer风格窗口 386
18.4.9 树控件 388
18.5 安装与配置 394
小结 395
第19章 考勤系统 396
19.1 用MFC DAO的方法访问数据库 396
19.1.1 MFC DAO类 397
19.1.2 数据库操作 397
19.1.3 表操作 398
19.1.4 记录集操作 398
19.2 MFC中的动态数据交换机制 401
19.3 结构化异常处理 404
19.3.1 结构化异常处理机制(SEH) 404
19.3.2 MFC中的异常类 406
19.4 需求分析说明 409
19.4.1 签到功能 409
19.4.2 查询功能 410
19.4.3 修改功能 410
19.4.4 系统配置功能 411
19.4.5 员工维护 411
19.4.6 用户登录 411
19.4.7 系统用户维护 411
19.5 系统分析与数据库设计 411
19.5.1 数据库设计 412
19.5.2 类设计 413
19.6 重点功能实现代码 413
19.6.1 改变对话框中控件的字体 413
19.6.2 取得记录集对象的记录个数 416
19.6.3 登录对话框实现 417
19.6.4 用户权限决定可使用的功能(菜单的控制) 418
19.6.5 CTime类在签到功能中的使用 420
19.6.6 查询某个员工某个时间段的出勤情况 426
19.6.7 修改出勤功能实现 429
19.6.8 员工维护 430
19.6.9 系统配置维护 433
19.6.10 用户管理 434
小结 436
第20章 网络信使系统 437
20.1 XML DOM技术基本知识 437
20.1.1 XML概述 437
20.1.2 DOM接口 438
20.1.3 创建DOM文档对象 439
20.1.4 加载XML文档 439
20.1.5 遍历XML文档 440
20.2 网络信使需求分析 441
20.2.1 在线朋友维护 441
20.2.2 聊天功能 442
20.2.3 文件传输拖动功能 443
20.2.4 查看历史信息 443
20.3 分析与设计 443
20.3.1 类设计 444
20.3.2 XML方式的数据格式 452
20.3.3 在线朋友数据结构 453
20.4 重点代码讲解 453
20.4.1 读取系统配置和用户配置XML文件 453
20.4.2 UDP广播实现朋友上线 456
20.4.3 朋友下线通知 461
20.4.4 XML聊天报文发送 463
20.4.5 聊天报文接收 468
20.4.6 查看聊天历史记录 470
20.4.7 文件发送 472
20.4.8 文件接收 476
20.4.9 拖动文件实现 477
小结 478
第21章 软件在线升级系统 479
21.1 COM基本知识 479
21.1.1 COM的特点 479
21.1.2 COM接口 480
21.1.3 IUnknown接口 483
21.1.4 类厂(class factory) 486
21.2 用ATL编写COM 487
21.2.1 C++中的模板 488
21.2.2 智能指针 489
21.2.3 ATL的智能指针 491
21.3 WinInet API中与HTTP相关的函数 492
21.3.1 HTTP的工作方式 493
21.3.2 HTTP客户请求 494
21.3.3 HTTP客户获取服务器的响应信息 496
21.4 MFC WinInet类 497
21.4.1 CInternetSession类 497
21.4.2 连接类 499
21.4.3 文件类 500
21.4.4 文件查找 504
21.5 软件在线升级系统的用户需求 504
21.5.1 初始下载界面 504
21.5.2 下载应用系统安装程序 505
21.5.3 安装应用系统 505
21.5.4 检查当前服务器上的版本号 505
21.5.5 更新应用系统 506
21.6 软件在线升级系统的分析与设计 506
21.6.1 IE瘦客户端 506
21.6.2 Web+Active X 506
21.6.3 应用程序端 508
21.6.4 Web页面 508
21.7 重点代码讲解 509
21.7.1 工程创建和IUpgradeAtx接口 509
21.7.2 判断程序是否已经存在 513
21.7.3 远程FTP下载 514
21.7.4 启动安装 517
21.7.5 COM组件在IE中显示进度 517
21.7.6 Active X的安装与压缩cabarc 518
21.7.7 对Cab文件进行数字签名 519
21.7.8 网页的编写 519
21.7.9 服务器方提供当前最新的版本号 521
小结 521
第22章 五笔编码速查系统 522
22.1 需求分析说明 522
22.1.1 五笔编码查询功能 522
22.1.2 在线升级 523
22.1.3 快捷键呼叫功能 523
22.1.4 最小化到通知区 523
22.1.5 指定汉字输入法 524
22.2 系统分析与设计 524
22.2.1 五笔编码查询设计 524
22.2.2 在线检查升级设计 524
22.3 重点功能实现代码 525
22.3.1 五笔编码查询 525
22.3.2 在线升级 527
22.3.3 修改PropertySheet窗口风格 530
22.3.4 给PropertySheet加入菜单 531
22.3.5 拦截PropertySheet的内定动作 532
22.3.6 加入快捷键支持 533
22.3.7 最简单的自定义消息框MessageBoxIndirect 535
22.3.8 通知区功能 536
22.3.9 控制系统单一运行实例 538
22.3.10 选择和激活输入法 539
22.3.11 保存系统配置 541
小结 542
第23章 流媒体计费系统 543
23.1 需求分析说明 543
23.1.1 授权 543
23.1.2 计费 544
23.1.3 内容翻转 544
23.1.4 限制连接数量 545
23.1.5 支持多个收费目录 545
23.2 系统分析与设计 545
23.2.1 架构选择与设计 545
23.2.2 授权功能 546
23.2.3 计费功能 548
23.2.4 限制和翻转播放内容 548
23.3 重点功能实现代码 549
23.3.1 Helix Universal Server开发环境 549
23.3.2 编写Helix Universal Server插件 549
23.3.3 限制和翻转播放内容 551
23.3.4 建立定时器控制 556
23.3.5 进行授权请求 558
23.3.6 进行计费请求 566
23.3.7 创建常用对象IRMAValues和IRMABuffer 569
23.3.8 自定义插件描述信息 570
23.3.9 从连接中得到Cookie 571
23.3.10 使用UDP进行通信 572
小结 574
第24章 停车场管理系统 575
24.1 Visual C++实现串口通信 575
24.1.1 串口通信概述 575
24.1.2 控件的方法实现串口通信 576
24.1.3 标准通信函数的方法实现串口通信 580
24.1.4 文件的方法实现串口通信 580
24.2 需求分析说明 589
24.3 系统分析与设计 591
24.3.1 数据库设计 591
24.3.2 进入停车场 593
24.3.3 条形码支持 593
24.3.4 收费 594
24.3.5 智能报价 594
24.3.6 LED电子显示屏 595
24.4 重点功能实现代码 595
24.4.1 串口通信 595
24.4.2 使用视频设备 601
24.4.3 在Visual C++中隐式调用DLL 604
24.4.4 系统配置信息 605
24.4.5 同步客户机和服务器上的时间 608
24.4.6 智能报价 610
24.4.7 条码打印 612
24.4.8 自定义动画播放 614
小结 617
第2章 利用集成开发环境生成程序 18
【实例】一个简单的控制台应用程序:运行程序后,会自动打开一个对话框,上面显示“HELLO!”字样 23
第3章 Windows程序运行原理 26
【实例】一个用API编写的Windows应用程序。 30
第4章 开始使用MFC类库 38
【实例4.1】第一个MFC类创建的程序:使用MFC创建一个Windows应用程序,其作用是生成并打开一个空白窗口。 42
【实例4.2】一个简单的单文档或多文档应用程序。 48
【实例4.3】用MFC方法来实现一段“hello wor1d”程序:产生一个窗口,在窗口中显示hello world字样。 51
第5章 菜单与加速键 57
【实例】编写一个菜单程序,当用户按下一个标识为“PushMe”的菜单时,弹出一个带有“谢谢你,你已进入了一个全新的学习阶段,祝你学习开心!”的消息框。 57
第6章 AppWizard和ClassWizard 72
【实例6.1】编写一个简单的实例程序,要求Example程序编写完成后的运行画面如图6-1所示。 73
【实例6.2】调试实例:为了更好地介绍调试技术,我们需要建立一个程序Example。 78
第7章 在Windows中绘制图像 84
【实例】绘制简单折线图。 91
第9章 文本和字体类 130
【实例9.1】使用成员函数CreateFont()来创建CFont对象并绘制文本“中国欢迎您”。 132
【实例9.2】使用成员函数CreateFontIndirect(),通过LOGFONT结构来创建CFont对象并绘文本“中国欢迎您”。 134
【实例9.3】使用CreateFont()函数和TextOut()函数自定义逻辑字体并输出。 137
【实例9.4】使用CreateFontIndirect()函数和DrawText()函数自定义逻辑字体并输出 139
第11章 文件操作 182
【实例11.1】将数据串行化到一个文件。 182
【实例11.2】创建电话簿并保存信息。 188
【实例11.3】CFile类实现文件的打开操作。 199
【实例11.4】异常处理代码。 201
【实例11.5】Close()函数使用实例。 203
【实例11.6】Abort()函数使用实例。 203
【实例11.7】TRY/CATCH块获得文件异常信息的示例代码。 205
【实例11.8】创建一个可以多选的文件对话框。 207
【实例11.9】重载文件对话框。 207
第13章 动态链接库 240
【实例13.1】通过隐式链接调用MyDll.dll库中的Min函数 243
【实例13.2】在动态链接库中方便地使用资源 251
【实例13.3】界面汉化系统。 253
【实例13.4】鼠标钩子应用实例。 258
【实例13.5】键盘钩子应用实例。 261
第14章 多线程 266
【实例14.1】创建工作者线程。 268
【实例14.2】唤醒线程实例。 269
【实例14.3】在线程函数中调用AfxEndThread()函数终止线程。 269
【实例14.4】安全地使用CWinThread对象。 270
【实例14.5】演示不同优先级的线程工作情况,用绘制矩形的方法来显示执行快慢。 271
【实例14.6】线程挂起和恢复。 273
【实例14.7】用CCriticalSection保护堆栈数据。 277
【实例14.8】用CEven控制线程运行顺序。 278
【实例14.9】利用CMutex类实现和CCriticalSection相同的功能。 279