第一章 概述 1
1.1 Windows编程模式 1
1.1.1 消息处理 1
1.1.2 多任务环境 2
1.1.3 硬件无关性 2
1.1.4 基于资源的程序设计 3
1.1.5 动态链接库(DLLs) 3
1.2 Visual C++6.0简介 3
1.2.1 Visual工作平台和Visual C++工程 3
1.2.2 Visual C++6.0工作平台 4
1.2.3 举例说明Visual C++6.0的使用方法 15
1.3 学会使用Microsoft基本类库(MFC) 20
1.3.1 MFC库的划分 20
1.3.2 根类 21
1.3.3 应用程序体系结构 22
1.3.4 可视对象类 23
1.3.5 通用类 26
1.3.6 OLE类 29
1.3.7 数据库类 32
1.3.8 Internet类 33
1.3.9 宏和全局函数 34
第二章 构造程序框架 35
2.1 Visual C++的工程(Projects) 35
2.2 三种基本应用程序框架 36
2.2.1 单文档(SDI)应用框架 37
2.2.2 多文档(MDI)应用框架 50
2.2.3 基于对话框的应用框架 55
2.3 程序运行流程分析 58
3.1.1 Windows的菜单 60
3.1 应用程序的菜单和键盘加速键(Hotkey) 60
第三章 菜单和键盘加速键 60
3.1.2 键盘加速键 61
3.1.3 命令(Command)处理 61
3.1.4 例程Ex03a——编写自己的菜单 64
3.2 菜单的动态管理 70
3.2.1 框架窗口如何管理菜单 70
3.2.2 菜单的允许和禁止 71
3.2.3 动态菜单(DynaMenu)——例程Ex03b 71
3.2.4 例程Ex03b的过程分析和执行结果 79
3.3 菜单的操作 80
3.3.1 CMenu类 80
3.3.2 菜单类中的各种操作 81
4.1 工具条设计及控制 84
4.1.1 控制条和应用框架 84
第四章 工具条和状态条 84
4.1.2 工具条 85
4.1.3 工具条命令消息 85
4.1.4 Ex04a例程——添加自己的工具条按钮 87
4.2 状态条设计及控制 92
4.2.1 状态条 92
4.2.2 状态条控制 92
4.2.3 Ex04b例程——显示用户设计的状态条 93
4.2.4 Ex04c例程——自行设计文本编辑器 98
第五章 单文档(SDI)/视窗模型 111
5.1 文档与视的分离 112
5.1.1 CView类的GetDocument函数 113
5.1.2 VDocument类的UpdateAllViews函数 113
5.1.3 CView类的OnUpdate函数 113
5.2 简单的文档/视应用 114
5.2.1 简单的文档/视应用的创建步骤 114
5.1.4 CView类的OnInitialUpdate函数 114
5.2.2 全面了解SDI应用 115
5.2.3 简单的学生管理程序——例程Ex05a 119
5.3 文档与视的高级应用 127
5.3.1 更高级的文档/视应用的创建步骤 127
5.3.2 更高级的学生管理程序——例程Ex05b 128
5.4 单文档的读写接口 140
5.4.1 序列化 140
5.4.2 序列化学生管理程序——例程Ex05c 143
第六章 多文档(MDI)/视窗模型 146
6.1 典型的MDI应用 146
6.1.1 MDI应用对象 146
6.1.2 MDI文档模板 146
6.1.3 MDI框架窗口和子窗口 148
6.1.6 为现存文档创建新的视 149
6.1.4 主框架和文档模板资源 149
6.1.5 创建空文档——CwinApp::OnFileNew函数 149
6.1.7 装入和存入文档 150
6.1.8 多文档模板 150
6.1.9 管理MDI的子窗口 150
6.2 程序和文档的拖放 151
6.2.1 允许拖和放 151
6.2.2 处理WM_DROPFILES消息 151
6.3 切分窗口 152
6.4 多文档应用——例程Ex06a(Viewex) 153
6.4.1 例程Ex06a的功能描述 153
6.4.2 创建例程Ex06a(名为Viewex) 154
6.5 如何将单文档型应用转化为多文档型应用 167
7.1 设备环境类 172
7.1.1 设置环境类(CDC) 172
第七章 图形设备接口(GDI) 172
7.1.2 其它设备描述表 173
7.1.3 构造和析构以及CDC状态 174
7.2 GDI对象 175
7.2.1 图形设备接口 175
7.2.2 图形对象类 176
7.2.3 GDI对象的构析与选择 177
7.2.4 例程Ex07a——设计用户的屏幕保护程序 178
7.3 Windows映射方式 197
7.3.1 固定比例的映射方式 198
7.3.2 可变比例的映射方式 199
7.3.3 坐标变换 201
7.4 字体控制 202
7.4.1 字体显示 202
7.4.2 计算字符高度 203
7.4.3 例程Ex07b——显示尺寸风格各异的字体 204
第八章 消息处理机制 209
8.1 消息处理过程 209
8.1.1 消息 209
8.1.2 消息映射(Message Map) 210
8.2 常见的Windows消息 211
8.2.1 鼠标消息 211
8.2.2 Ex08a例程——用鼠标拖动一个圆 211
8.2.3 键盘消息 217
8.2.4 Ex08b例程——用键盘来滚动窗口 217
8.2.5 窗口消息 221
8.2.6 Ex08c例程——通过定时器播放音乐 222
8.2.7 其它窗口消息 224
8.2.8 Ex08d例程——热键的定义和使用 224
8.3 用户自定义消息 226
8.3.1 消息调度函数 226
8.3.2 Ex08e例程——用户自定义消息发收 227
第九章 Windows 98常用控制 231
9.1 Windows常用控制 232
9.1.1 Animate控制 232
9.1.2 List控制 232
9.1.3 Progress控制 235
9.1.4 SpinButton控制 235
9.1.5 Tab控制 236
9.1.6 ToolBar控制 237
9.1.7 ToolTip控制 238
9.1.8 Tree控制 239
9.2 常用控制的属性及控制方法 244
第十章 部件库(Gallery)的使用 271
10.1 部件库的使用 271
10.1.1 往工程中增加部件库的项 271
10.2.1 几种常见的部件库组件 273
10.1.2 Visual C++的组件目录和已经注册过的ActiveX控制目录 273
10.2 几种常见的部件库组件 273
10.2.2 例程Ex10a——部件库的使用 276
第十一章 有模式对话框 299
11.1 构造有模式对话框 299
11.1.1 对话框的组成部分 299
11.1.2 有模式和无模式对话框 299
11.1.3 有模式对话框的程序设计 299
11.1.4 对话框的控制 300
11.1.5 CDialog类 301
11.1.6 例程Exlla——创建一个“Pen Widths”对话框 302
11.2 对话框内的事件处理 307
11.2.1 例程Ex11b——自制的对话框模板 307
11.2.2 例程的编写步骤 308
11.3.1 有模式对话框的函数调用顺序 318
11.3 对话框的调用过程和数据交换 318
11.3.2 更深入地了解对话框的调用过程 319
11.3.3 简单介绍数据交换和数据检验(DDX/DDV)过程 324
第十二章 无模式对话框及COMMDLG对话框类 327
12.1 创建无模式对话框 327
12.1.1 无模式对话框 327
12.1.2 (非基于资源)无模式对话框创建 328
12.1.3 例程Ex12a——添加用户列表 329
12.2 CFormView类 335
12.3 COMMDLG对话框 337
12.3.1 公用对话框类 337
12.3.2 例程Ex12b——使用CColorDialog的应用 340
第十三章 多任务 355
13.1 多进程和多线程 355
13.1.1 使用工作线程 356
13.1.2 使用用户接口线程 358
13.1.3 创建一个新进程 362
13.2 优先级的设定 364
13.2.1 优先级类 365
13.2.2 优先级层 366
13.2.3 基本优先级 367
13.3 多线程应用程序的设计 367
13.3.1 例程Ex13a——工作线程的计算应用 368
13.3.2 创建Ex13a例程 368
第十四章 任务间通信与同步 387
14.1 进程间的通信与同步 387
14.1.1 同步进程及获得句柄 387
14.1.2 管道数据交换 390
14.1.3 共享数据内存 390
14.1.4 剪贴板数据交换 392
14.2.1 线程间通心 394
14.2 线程间的通信与同步 394
14.2.2 同步类及同步访问类 396
14.2.3 何时使用以及如何使用同步类 400
14.2.4 例程Ex14a——多线程GDI绘图 401
第十五章 数据库管理 421
15.1 数据库管理和序列化 421
15.1.1 MFC和DAO和ODBC 422
15.1.2 DAO和ODBC访问的数据 422
15.1.3 ODBC驱动程序列表 423
15.1.4 何时使用DAO或ODBC 424
15.2 Microsoft ODBC数据库管理 424
15.2.1 MFC的ODBC 424
15.2.2 ODBC类库 427
15.2.3 例程Ex15a——ODBC数据库直接调用 429
15.3.1 MFC的DAO 443
15.3 DAO数据库管理 443
15.3.2 例程Ex15b——DAO数据库应用 445
第十六章 Internet网络应用 465
16.1 WinInet类 465
16.1.1 WinInet(HTTP、FTP、Gopher) 465
16.1.2 创建一个国际互联网客户端应用的过程 466
16.1.3 实现典型WinInet任务的步骤 473
16.1.4 国际互联网应用的第一步:WinInet 476
16.1.5 例程Ex16a——创建一个FTP客户端应用 478
16.2 Windows Socket编程简介 496
16.2.1 Windows Sockets2 简介 496
16.2.2 MFC类库中的Windows Sockets 496
16.2.3 Windows Sockets 如何与归档文件工作 497
16.2.4 套接口通信流操作方式 498
17.1 ActiveX/OLE控件 501
第十七章 ActiveX控件 501
17.1.1 什么是ActiveX/OLE控件 502
17.1.2 OLE控件接口 502
17.1.3 ActiveX控件 503
17.2 创建用户的ActiveX控件 503
17.2.1 例程Ex17a——创建一个基本控件 504
17.2.2 例程Ex17a的控制执行代码 505
17.3 添加ActiveX控件的属性 509
17.3.1 添加库存属性 509
17.3.2 添加用户定制属性 511
17.3.3 例程Ex17b——添加控件属性 513
17.4 添加ActiveX控件的事件和方法 519
17.4.1 ActiveX事件 519
17.4.2 ActiveX方法 522
17.4.3 例程Ex17c——添加事件及方法 524
17.4.4 测试用户的ActiveX控件 530
第十八章 动态链接库DLL 533
18.1 MFC库DLL 533
18.1.1 DLL操作相关函数 533
18.1.2 常规MFC DLL 535
18.1.3 MFC扩展DLL 537
18.1.4 使用MFC作为DLL的一部分 538
18.2 创建自定义DLL 541
18.2.1 从DLL中输出 541
18.2.2 初始化DLL 543
18.3 DLL的使用 546
18.3.1 将可执行文件链接到DLL 546
18.3.2 使用隐式链接 548
18.3.3 例程Ex18a——创建以及使用用户MFC扩展DLL 548
18.3.4 创建Ex18a项目 549