第一篇 C++、VC6.0和应用程序框架基础 1
第1章 VC 6.0开发环境和应用程序框架 1
1.1 安装并使用VC 6.0 1
1.1.1 什么是VC 6.0集成开发环境 1
1.1.2 安装VC 6.0 2
1.1.3 VC 6.0开发环境的主界面 4
1.1.4 使用向导创建VC 6.0应用程序项目 5
1.2 认识VC 6.0 7
1.2.1 C/C++编译器及编译过程 7
1.2.2 编辑器 8
1.2.3 资源编辑器和资源符号 8
1.2.4 连接器和调试器 9
1.2.5 学习VC 6.0的主要菜单功能 9
1.2.6 项目和解决方案 15
1.2.7 本机帮助和联机帮助 15
1.3 Win32基本应用程序的创建 16
1.3.1 使用AppWizard应用程序向导创建Win32程序 16
1.3.2 生成Win32应用程序 17
1.3.3 VC 6.0的调试:变量跟踪和函数调用栈 21
1.4 Microsoft应用程序框架 22
1.4.1 全局对象 22
1.4.2 MFC的消息映射和消息分类 23
1.5 实例1.1——编写第一个C++程序:Hello,C++! 23
1.6 实例1.2——创建第一个MFC程序:Hello,MFC! 25
1.7 小结 26
1.8 常见面试题分析 26
1.9 本章习题 26
第2章 C++语法基础 27
2.1 认识C++开发语言 27
2.1.1 C++的由来 27
2.1.2 使用C++语言的优势 28
2.2 数据类型定义和使用 28
2.2.1 变量 28
2.2.2 数据类型 29
2.2.3 算术运算符 32
2.2.4 枚举、指针和数组 33
2.2.5 string类和C风格字符串 36
2.2.6 结构体类型 38
2.2.7 类类型 39
2.2.8 实例2.1——成绩管理系统(1.0版) 43
2.3 运算符、表达式和语句 46
2.3.1 “<<”和“>>”运算符 47
2.3.2 “++”和“--”运算符 47
2.3.3 循环语句:for语句、while语句和do...while语句 48
2.3.4 判断语句:if语句和switch语句 50
2.3.5 实例2.2——成绩管理系统(2.0版) 54
2.4 函数定义和调用 57
2.4.1 定义函数和函数原型 57
2.4.2 函数通过指针来调用数组 58
2.4.3 函数指针 59
2.4.4 具有引用参数的函数 60
2.4.5 函数重载 62
2.4.6 函数模板的定义和使用 63
2.4.7 实例2.3——成绩管理系统(3.0版) 64
2.5 类的定义和对象构造 67
2.5.1 自然界中的类型和C++的类定义 67
2.5.2 实现类成员函数 69
2.5.3 实例化类对象并使用 71
2.5.4 类的构造函数和析构函数 71
2.5.5 运算符重载与this指针的使用 74
2.5.6 友元函数和友元类 75
2.5.7 实例2.4——成绩管理系统(4.0版) 78
2.6 类继承 82
2.6.1 is-a关系 82
2.6.2 多态公有继承 84
2.6.3 protected访问控制 86
2.6.4 抽象基类 87
2.6.5 私有继承和保护继承 88
2.6.6 多继承 88
2.6.7 类模板 89
2.7 C++异常机制 90
2.7.1 异常处理类型 90
2.7.2 exception类 92
2.8 标准模板库(STL) 93
2.8.1 auto_ptr类的使用 93
2.8.2 vector模板类的定义和使用 93
2.8.3 通用算法 95
2.8.4 实例2.5——成绩管理系统(5.0版) 96
2.9 I/O流和文件 101
2.9.1 C++的输入和输出 101
2.9.2 文件输入和输出 101
2.9.3 实例2.6——在VC 6.0中创建C++源文件,使用磁盘文件读写 102
2.10 小结 103
2.11 常见面试题分析 104
2.12 本章习题 105
第二篇 MFC基础 107
第3章 Windows消息映射 107
3.1 视图类 107
3.1.1 什么是视图 107
3.1.2 MFC程序中的视图类 107
3.2 应用程序的类型 108
3.3 资源编辑器 109
3.4 MFC应用程序中的各种子功能 110
3.5 消息映射函数和Windows映射模式 113
3.5.1 获取用户单击和输入 113
3.5.2 MM_TEXT映射模式 113
3.5.3 固定比例映射模式 114
3.5.4 可变比例映射模式 114
3.5.5 坐标转换 114
3.6 其他Windows消息 115
3.7 实例3.1——消息映射函数的使用 115
3.8 小结 118
3.9 常见面试题分析 118
3.10 本章习题 119
第4章 GDI函数 120
4.1 设备环境类 120
4.1.1 认识CDC类 120
4.1.2 CDC派生类:CPaintDC类 120
4.1.3 CDC派生类:CClientDC类 121
4.1.4 CDC类对象的行为函数 121
4.2 GDI对象的构造和使用 123
4.3 字体选择和显示 124
4.4 实例4.1——字体的使用 124
4.5 GDI位图和DIB位图 126
4.6 实例4.2——位图的使用 127
4.7 小结 130
4.8 常见面试题分析 131
4.9 本章习题 131
第5章 对话框 132
5.1 两种不同类型的对话框 132
5.2 实例5.1——计算器软件的开发 132
5.3 实例5.2——模式对话框的创建和使用 136
5.4 Windows通用对话框 139
5.4.1 CFileDialog类——文件打开对话框的使用 139
5.4.2 CColorDialog类——调色板对话框的使用 140
5.4.3 CFindReplaceDialog类——字词查找和替换对话框的使用 141
5.4.4 CPageSetupDialog类——页面设置对话框的使用 142
5.4.5 CFontDialog类——字体设置对话框的使用 142
5.4.6 CPrintDialog类——打印设置对话框的使用 143
5.5 无模式对话框 144
5.6 小结 145
5.7 常见面试题分析 145
5.8 本章习题 146
第6章 控件 147
6.1 VC 6.0资源和通用控件 147
6.2 VC 6.0的控件工具箱 147
6.3 实例6.1——简单控件的使用 149
6.4 标准通用控件 152
6.4.1 进度指示器控件 152
6.4.2 滑块控件 152
6.4.3 列表控件 153
6.4.4 树状控件 153
6.5 实例6.2——标准通用控件的使用 154
6.6 实例6.3——成绩管理系统(6.0版-Windows版) 157
6.7 小结 170
6.8 常见面试题分析 170
6.9 本章习题 171
第7章 Windows的基本输入 172
7.1 键盘消息及其处理 172
7.1.1 键盘消息的处理 172
7.1.2 键盘消息处理函数 173
7.1.3 实例7.1——键盘消息处理 174
7.2 鼠标消息及其处理 177
7.2.1 鼠标消息的处理 177
7.2.2 鼠标消息处理函数 178
7.2.3 实例7.2——鼠标消息处理(五子棋游戏) 179
7.3 小结 190
7.4 常见面试题分析 190
7.5 本章习题 191
第8章 ActiveX控件 192
8.1 ActiveX控件的特殊性 192
8.1.1 ActiveX控件和普通控件的相同点 192
8.1.2 ActiveX控件和普通控件的不同点 192
8.2 安装ActiveX控件 193
8.3 实例8.1——ActiveX控件:日历控件的创建 194
8.4 ActiveX控件在Web编程中的使用 195
8.5 图形属性和变化通知 196
8.6 小结 196
8.7 常见面试题分析 196
8.8 本章习题 197
第三篇 深入学习MFC 199
第9章 菜单和框架窗口 199
9.1 Windows应用程序的框架窗口 199
9.2 Windows菜单和MFC菜单编辑器 200
9.3 Windows应用程序的快捷键 200
9.4 命令处理的使用 201
9.5 富文本编辑 202
9.5.1 编辑视图类:CEditView类 202
9.5.2 富文本编辑视图类:CRichEditView类 202
9.5.3 富文本编辑控件类:CRichEditCtrl类 203
9.6 实例9.1——快捷键和文本编辑使用 203
9.6.1 基本框架和界面实现 203
9.6.2 快捷键设计 205
9.6.3 存储和显示文档类中的文本 205
9.6.4 选项卡对话框的设计 206
9.6.5 视图类的功能实现 208
9.6.6 运行效果和实践小结 210
9.7 属性表的开发过程 210
9.8 鼠标右键调用的浮动快捷菜单 211
9.9 CPersistentFrame持续信息类的使用 212
9.10 使用ActivateFrame()成员函数设置窗口尺寸和位置 213
9.11 创建窗口之前的工作:PreCreateWindow成员函数 213
9.12 控制栏状态和Windows注册表 214
9.13 MDI应用程序和持续框架 214
9.14 小结 215
9.15 常见面试题分析 215
9.16 本章习题 216
第10章 工具栏和状态栏 217
10.1 MFC应用程序框架和控制栏 217
10.2 工具栏按钮 217
10.2.1 工具栏位图和按钮的状态 218
10.2.2 命令消息和更新命令控制函数 218
10.3 工具栏提示信息 219
10.4 实例10.1——使用工具栏的应用程序 219
10.5 状态栏的定义和显示 222
10.5.1 状态栏的定义 222
10.5.2 信息行的显示 223
10.5.3 状态指示器 223
10.6 实例10.2——使用状态栏的程序设计 224
10.7 小结 225
10.8 常见面试题分析 226
10.9 本章习题 228
第11章 文档和视图的分离 229
11.1 文档和视图相互作用的函数 229
11.1.1 获取当前文档:CView::GetDocument()函数 229
11.1.2 更新所有视图:CDocument::UpdateAllViews()函数 230
11.1.3 视图自我更新:CViews::OnUpdate()函数 230
11.1.4 初始化更新界面:CView::OnInitiaIUpdate()函数 230
11.1.5 创建新文档:CDocument::OnNewDocument()函数 230
11.2 一个简单的文档视图应用程序的创建和分析 230
11.3 CView类的派生类 231
11.4 MFC类家族的始祖——CObject类 232
11.5 诊断信息转储基础 232
11.5.1 TRACE宏的使用 232
11.5.2 afxDump对象的使用 233
11.5.3 MFC的信息转储环境 233
11.6 实例11.1——使用诊断信息进行文档视图交互 235
11.6.1 项目创建和界面设计 235
11.6.2 CWorker类的设计 236
11.6.3 诊断信息和文档视图交互功能的实现 239
11.7 高级的文档和视图交互 241
11.8 CObList集合类 242
11.9 实例11.2——一个多视图的SDI应用程序 244
11.9.1 项目创建和界面设计 244
11.9.2 编写文档代码 244
11.9.3 编写视图代码 245
11.10 小结 247
11.11 常见面试题分析 247
11.12 本章习题 249
第12章 文档的读和写 250
12.1 序列化理论 250
12.1.1 磁盘文件和内存文件 250
12.1.2 类的序列化 251
12.1.3 编写Serialize()函数 251
12.2 Windows应用程序对象 252
12.3 实例12.1——支持序列化的应用程序 252
12.3.1 创建支持序列化的MFC应用程序 253
12.3.2 重写CObject基类的序列化函数 253
12.3.3 编写界面功能 254
12.3.4 开发序列化和反序列化功能 255
12.4 应用程序在Windows中注册 257
12.5 MDI应用程序 258
12.5.1 MDI应用程序对象 258
12.5.2 MDI文档模板类 258
12.5.3 MDI窗口类型 258
12.5.4 创建文档 259
12.6 实例12.2——MDI应用程序的创建 259
12.7 MTI支持 260
12.8 小结 261
12.9 常见面试题分析 261
12.10 本章习题 262
第13章 切分窗口和多视图 263
13.1 动态和静态切分窗口 263
13.2 关于视图的选择 263
13.3 实例13.1——简单动态切分窗口应用程序的创建 264
13.4 实例13.2——多视图的静态切分窗口的开发 266
13.5 实例13.3——多视图切换的开发 268
13.6 小结 270
13.7 常见面试题分析 270
13.8 本章习题 271
第14章 打印功能 272
14.1 Windows环境下的打印功能 272
14.2 打印预览 272
14.3 打印程序设计的相关接口 273
14.3.1 打印机设备环境 273
14.3.2 打印函数:CView::OnPrint()函数 273
14.3.3 打印程序的执行过程 273
14.4 实例14.1——打印应用程序的创建和使用 274
14.5 实例14.2——多页打印应用程序的创建和使用 277
14.6 小结 280
14.7 常见面试题分析 280
14.8 本章习题 281
第15章 上下文相关帮助 282
15.1 简易WinHelp的制作 282
15.2 应用程序框架WinHelp 284
15.2.1 调用WinHelp 284
15.2.2 使用搜索功能 284
15.2.3 消息框帮助 285
15.3 实例15.1——帮助示例 285
15.4 帮助快捷键和菜单命令 287
15.4.1 使用F1快捷键 287
15.4.2 通过菜单命令调用帮助过程 287
15.5 小结 288
15.6 常见面试题分析 288
15.7 本章习题 288
第16章 动态链接库(DLL) 289
16.1 DLL理论基础 289
16.1.1 DLL导入和导出的原理 290
16.1.2 隐式和显式连接 290
16.1.3 符号和序号连接 290
16.1.4 DllMain()函数 291
16.2 正规的MFC DLL和扩展的MFC DLL 291
16.2.1 正规的DLL 291
16.2.2 扩展的DLL 293
16.3 自定义控件DLL 294
16.4 实例16.1——创建和使用自定义控件DLL 295
16.4.1 创建项目 296
16.4.2 添加功能代码 296
16.4.3 创建客户程序测试自定义控件 298
16.5 小结 299
16.6 常见面试题分析 300
16.7 本章习题 300
第17章 MFC类家族 301
17.1 MFC类家族结构 301
17.2 MFC运行机制 302
17.3 MFC家族分支 303
17.3.1 CView视图类分支 303
17.3.2 CDC画图类分支 304
17.3.3 CException异常类分支 305
17.3.4 CGdiObject类分支 306
17.3.5 套接字类分支 307
17.4 非CObject派生类 307
17.4.1 简单类型类 307
17.4.2 Internet Server API类 308
17.5 小结 308
17.6 常见面试题分析 309
17.7 本章习题 309
第四篇 自动化、COM和OLE DB 311
第18章 自动化 311
18.1 什么是VBA 311
18.2 VBA与C++组件 312
18.3 自动化接口 312
18.4 MFC自动化组件 313
18.5 实例18.1——MFC自动化的使用 314
18.5.1 创建MFC DLL自动化项目 315
18.5.2 添加自动化类和成员函数 315
18.5.3 在Windows中注册自定义的动态链接库 317
18.5.4 使用非VC应用程序调用自定义DLL 318
18.5.5 实例小结 319
18.6 VARIANT类型 319
18.7 封装VARIANT类型:COle Variant类 321
18.8 实例18.2——使用Excel自动化的实例 322
18.8.1 准备工作:创建MFC 323
18.8.2 加入自动化代码 323
18.8.3 添加组件类 324
18.8.4 编写客户端宏脚本 325
18.9 小结 327
18.10 常见面试题分析 327
18.11 本章习题 328
第19章 组件对象模型(COM) 329
19.1 什么是COM 329
19.2 COM接口 330
19.3 实例19.1——COM的使用 331
19.3.1 使用VC 6.0创建ATL COM应用程序 332
19.3.2 创建新的ATL对象 332
19.3.3 实现_IDTExtensibility2接口 333
19.3.4 通知Office并加载组件接口 333
19.3.5 导入Office接口文件 334
19.3.6 完成功能代码 335
19.3.7 运行效果和小结 337
19.4 COM的包容、集合和继承 337
19.5 小结 338
19.6 常见面试题分析 338
19.7 本章习题 338
第20章 OLE DB 339
20.1 OLE DB对象模型 339
20.2 OLE DB模板的基本结构 340
20.3 OLE DB客户数据库访问的两种途径 341
20.3.1 以MFC AppWizard(exe)为向导建立OLE DB客户程序框架 341
20.3.2 以ATL COM AppWizard为向导建立OLE DB客户程序框架 343
20.4 小结 345
20.5 常见面试题分析 346
20.6 本章习题 346
第五篇 软件研发实践 347
第21章 数据库编程基础 347
21.1 数据库开发技术简介 347
21.1.1 当今常用的几种数据库管理系统(DBMS) 347
21.1.2 关系代数与数据库SQL语言 348
21.1.3 规范化和数据库表设计常见的问题 350
21.1.4 ADO、DAO和ODBC技术简介 351
21.2 在VC 6.0中使用ODBC进行数据库链接 352
21.2.1 ODBC概述 352
21.2.2 ODBC类的使用 352
21.2.3 ODBC数据库操作 354
21.3 在VC 6.0中使用ADO进行数据库链接 355
21.3.1 ADO概述 355
21.3.2 ADO连接应用 356
21.3.3 ADO数据库操作 357
21.4 小结 359
21.5 常见面试题分析 359
21.6 本章习题 360
第22章 网络编程基础 361
22.1 TCP/IP协议简介 361
22.2 Windows Sockets基础 362
22.2.1 套接字概述 363
22.2.2 WinSock API常用函数 363
22.2.3 MFC对WinSock API的封装 364
22.3 B/S模式和C/S模式 364
22.3.1 什么是B/S和C/S模式 364
22.3.2 C/S与B/S的区别 365
22.4 局域网技术 366
22.4.1 网卡地址 366
22.4.2 获取计算机名称和IP 366
22.5 信息打包和发送 367
22.6 小结 368
22.7 常见面试题分析 368
22.8 本章习题 369
第23章 多线程HTTP下载工具制作 370
23.1 案例效果图 370
23.2 案例需求 370
23.3 需要掌握的知识点 370
23.4 MFC中的WinInet 371
23.4.1 使用MFC WinInet下载文件过程 371
23.4.2 实例23.1——简单使用MFC WinInet读取网页源代码 372
23.4.3 实例解析 374
23.5 IE右键菜单原理 376
23.5.1 IE右键菜单对应的注册表 376
23.5.2 编写JavaScript启动程序 376
23.6 开发过程 379
23.6.1 获得命令行参数 379
23.6.2 多线程下载类设计 379
23.6.3 使用CDownloadThreadManager下载资源 387
23.6.4 统计下载速度与下载用时 391
23.7 小结 392
第24章 远程控制软件制作 393
24.1 案例效果图 393
24.2 案例需求和知识点 393
24.2.1 案例需求 393
24.2.2 需要掌握的知识点 393
24.3 图像传输优化方法 394
24.4 模拟鼠标动作 394
24.5 开发过程 395
24.5.1 服务器端结构分析 395
24.5.2 服务器端GDI结构与链表设计 395
24.5.3 初始化GDI链表与清理GDI链表 397
24.5.4 启动服务接收网络事件 399
24.5.5 保证发送接收大小 401
24.5.6 通信协议设计 402
24.5.7 发送图像数据 403
24.5.8 客户端结构分析 408
24.5.9 客户端创建 408
24.5.10 客户端GDI结构与链表设计 409
24.5.11 连接服务器 410
24.5.12 获取及显示远程图像 412
24.5.13 发送鼠标事件 416
24.6 小结 417
第25章 学生成绩管理系统开发 418
25.1 系统结构分析 418
25.2 案例需求 418
25.3 数据库设计 419
25.4 案例效果图 422
25.5 需要掌握的知识点 424
25.6 使用DataGrid控件显示数据 424
25.6.1 添加DataGrid控件 424
25.6.2 程序中使用DataGrid控件 425
25.7 开发过程 425
25.7.1 准备工作 426
25.7.2 登录窗口 426
25.7.3 主窗口 428
25.7.4 管理成绩信息窗口 430
25.7.5 管理分数对话框 433
25.7.6 审核窗口 438
25.8 小结 442