第1章 Windows应用程序基础知识 1
1.1 Windows应用程序的基本概念 1
1.1.1 Windows应用程序的界面 1
1.1.2 Windows应用程序与API函数 1
1.1.3 Windows的一个特殊数据类型——句柄 2
1.1.4 Windows应用程序的数据类型 3
1.1.5 消息与消息循环 4
1.2 Windows应用程序的结构 6
1.2.1 主函数 6
1.2.2 消息的处理部分——窗口函数 8
1.2.3 Windows系统、主函数、窗口函数之间的关系 9
1.3 用函数封装Windows程序 15
1.4 窗口函数的另一种结构 19
小结 22
练习题 22
思考题 23
第2章 Windows应用程序的类封装 25
2.1 应用程序主函数的C++类封装 25
2.1.1 窗口类的声明 26
2.1.2 应用程序类的声明 27
2.1.3 主函数封装后的程序 28
2.2 派生类的应用 32
2.2.1 应用程序类的派生类 33
2.2.2 窗口类的派生类 35
2.3 窗口函数的封装——消息映射 39
2.3.1 消息处理函数的简单封装 40
2.3.2 消息映射 42
2.3.3 消息映射表的声明和实现 45
小结 48
练习题 48
思考题 49
第3章 MFC应用程序框架 51
3.1 早期的应用程序框架及其MFC类 51
3.1.1 早期的应用程序框架 51
3.1.2 MFC的窗口类 52
3.1.3 CWinApp类 53
3.2 最简单的MFC程序实例 54
3.2.1 程序的编写 54
3.2.2 程序主函数的代码 56
3.3 应用程序的文档/视图结构 57
3.3.1 文档/视图结构的基本概念 57
3.3.2 单文档界面和多文档界面结构 59
3.4 文档类CDocument的派生类 60
3.5 视图类CView的派生类 61
3.6 窗口框架类CFrameWnd的派生类 62
3.7 文档模板类CDocTemplate 64
3.8 应用程序类的派生类 65
3.8.1 应用程序类派生类的代码 65
3.8.2 程序员的主要工作 66
3.9 MFC文档/视图应用程序框架中各个对象的关系 67
3.9.1 应用程序各对象创建的顺序 67
3.9.2 应用程序各对象之间的联系 68
3.9.3 文档/视图应用程序消息的传递 71
3.10 对象的动态创建 71
3.10.1 问题的提出与解决 71
3.10.2 类信息表及其声明和实现 76
3.10.3 对象类信息表的提取 77
小结 78
练习题 78
思考题 78
第4章 图形 79
4.1 DC和GDI 79
4.1.1 设备描述环境 79
4.1.2 Windows的GDI 80
4.2 CDC类 80
4.3 CPen类 82
4.4 CBrush类 85
4.5 绘图模式 87
4.6 文本和CFont类 88
4.6.1 显示文本 88
4.6.2 字体和CFont类 91
4.7 CDC的其他派生类 93
4.7.1 窗口用户区设备描述环境CClientDC类 93
4.7.2 图元文件设备描述环境CMetaFileDC类 94
小结 96
练习题 96
思考题 96
第5章 MFC的通用类 97
5.1 简单数据类 97
5.1.1 点类CPoint 97
5.1.2 矩形类CRect 98
5.1.3 尺寸类CSize 98
5.1.4 字符串类CString 99
5.2 群体数据类 100
5.3 数据在文档/视图结构程序中的位置 102
小结 104
练习题 104
思考题 104
第6章 Windows应用程序界面的设计 105
6.1 SDI和MDI界面 105
6.2 SDI界面窗口的样式 106
6.2.1 在MFC AppWizard中确定窗口样式 106
6.2.2 在函数PreCreateWindow中修改窗口的样式 107
6.2.3 可拆分为小窗口的SDI界面 111
6.3 拆分窗口的同步更新及更新效率 112
6.3.1 拆分窗口的同步更新 112
6.3.2 提高拆分窗口更新效率的方法 112
6.4 创建带有滚动条的窗口 117
小结 121
练习题 121
思考题 122
第7章 鼠标和键盘 123
7.1 处理鼠标消息 123
7.1.1 用户区鼠标消息 124
7.1.2 非用户区鼠标消息 128
7.1.3 鼠标消息的捕获 129
7.2 处理键盘消息 130
7.2.1 按键的虚拟码 130
7.2.2 一般按键消息 133
7.2.3 系统按键消息 134
7.3 应用程序窗口的焦点 135
小结 136
练习题 137
思考题 138
第8章 资源 139
8.1 资源和资源文件 139
8.1.1 什么是资源 139
8.1.2 资源头文件 140
8.1.3 资源描述文件 141
8.2 菜单 141
8.2.1 资源描述文件的菜单部分 141
8.2.2 编辑现有的菜单 143
8.2.3 自定义菜单 146
8.2.4 用菜单编辑器编辑菜单 148
8.2.5 菜单命令选项的动态修改 148
8.3 快捷键表 151
8.3.1 资源描述文件的快捷键表部分 151
8.3.2 使用快捷键编辑器编辑快捷键表 152
8.4 图标 152
8.4.1 制作图标 152
8.4.2 资源描述文件的图标部分 153
8.5 位图 154
8.5.1 资源描述文件的位图部分 154
8.5.2 位图资源的使用 154
小结 157
练习题 158
思考题 158
第9章 MFC的文件处理机制 159
9.1 CFile类 159
9.1.1 CFile类常用成员函数 159
9.1.2 文件的创建与打开 159
9.1.3 文件的读写 161
9.1.4 CFile的派生类CMemFile 165
9.1.5 CFileFind类 166
9.2 CArchive类 167
9.2.1 插入符和提取符的重载 167
9.2.2 CArchive类对象与CFile类对象的关联 168
9.3 对象的序列化 170
9.3.1 序列化的基本概念 170
9.3.2 MFC的Serialize函数 171
9.3.3 MFC应用程序的序列化过程 173
9.3.4 序列化的顺序 174
9.4 宏DECLARE_SERIAL和IMPLEMENT_SERIAL 177
9.5 MFC文件命令的默认处理流程 182
9.5.1 应用程序启动后文档的初始化流程 182
9.5.2 应用程序菜单命令的默认处理 182
小结 183
练习题 183
思考题 183
第10章 控件 185
10.1 标准控件及其使用 185
10.1.1 标准控件 186
10.1.2 静态文本控件 186
10.1.3 按钮控件 188
10.1.4 编辑控件 192
10.2 通用控件 194
10.2.1 进度条控件 194
10.2.2 微调器控件 195
10.2.3 图像列表控件 199
10.2.4 列表视图控件 200
10.3 控件的背景颜色 208
小结 210
练习题 211
第11章 对话框 213
11.1 对话框模板资源描述文件 213
11.2 自定义对话框类 215
11.2.1 MFC的对话框类及用户自定义对话框类 216
11.2.2 模态对话框 217
11.3 对话框的数据交换和数据检验 221
11.3.1 数据交换 221
11.3.2 使用Class Wizard为对话框添加成员变量 223
11.3.3 数据检验 225
11.4 以对话框为主界面的应用程序 225
11.4.1 应用程序框架的设计 226
11.4.2 应用程序代码的设计 226
11.5 MFC预置的通用对话框 228
11.5.1 文件对话框 228
11.5.2 字体选择对话框 230
11.6 非模态对话框 233
11.7 属性页 235
小结 238
练习题 239
思考题 239
第12章 进程与线程的管理 241
12.1 进程、线程及其优先权 241
12.1.1 进程、线程的基本概念 241
12.1.2 进程和线程的优先级 241
12.2 工作线程和用户界面线程 243
12.2.1 工作线程的创建 243
12.2.2 用户界面线程的创建 244
12.3 线程同步 246
12.3.1 线程同步的基本概念 246
12.3.2 事件 247
12.3.3 临界段 251
12.3.4 互斥体 253
12.3.5 信号量 254
12.4 线程通信 256
12.4.1 利用全局变量进行通信 257
12.4.2 利用自定义的消息进行通信 258
小结 259
练习题 260
第13章 动态链接库及其使用 261
13.1 链接库 261
13.1.1 静态链接库 261
13.1.2 动态链接库 263
13.2 动态链接库的创建 265
13.2.1 导出函数的声明 265
13.2.2 用MFC编写DLL 268
13.3 动态链接库的使用 271
13.3.1 隐式链接方式 271
13.3.2 显式链接方式 272
小结 273
练习题 274
思考题 274
第14章 组件对象模型基础 275
14.1 组件对象模型概述 275
14.1.1 软件模块化的发展历程 275
14.1.2 组件对象模型 283
14.1.3 COM术语 283
14.2 组件类、接口的标识及注册 284
14.3 COM规定的标准服务 285
14.3.1 接口IUnknown 285
14.3.2 接口IClassFactory和IDispatch 289
14.4 COM接口的二进制标准及IDL语言 291
14.5 使用ATL设计组件 291
14.5.1 ATL对COM的支持 291
14.5.2 使用ATL设计组件的步骤和方法 292
14.5.3 浏览ATL生成的代码 295
14.6 组件的包含与聚合 298
14.6.1 包含 298
14.6.2 聚合 299
小结 299
练习题 300
思考题 300
第15章ActiveX应用基础 301
15.1ActiveX技术概述 301
15.1.1 ActiveX的前身——OLE 301
15.1.2 ActiveX技术的缘起 303
15.1.3 ActiveX自动化 303
15.1.4 ActiveX控件 304
15.1.5 ActiveX文档 305
15.1.6 ActiveX文档与ActiveX控件的区别 305
15.2 用MFC设计ActiveX容器 306
15.2.1 ActiveX容器的结构 306
15.2.2 用MFC设计ActiveX容器 306
15.3 用MFC设计ActiveX服务器 309
15.4用MFC设计ActiveX自动化应用程序 310
15.4.1 用MFC设计ActiveX自动化服务器 310
15.4.2 用MFC设计ActiveX自动化客户 313
15.5 用MFC设计ActiveX控件 315
小结 318
练习题 319
第16章 用MFC设计数据库应用程序 321
16.1 数据库系统及数据库应用程序 321
16.1.1 数据库系统 321
16.1.2 数据库应用系统的设计 322
16.2 ODBC的基本构成 322
16.3 配置ODBC数据源 323
16.3.1 ODBC管理器 324
16.3.2 配置ODBC数据源的方法和步骤 324
16.4 MFC的ODBC类 326
16.4.1 CDatabase类 327
16.4.2 CRecordset类 328
16.4.3 CDBException类 332
16.5 ODBC应用程序实例 333
16.5.1显示和处理表中的数据 333
16.5.2 连接两个表 338
16.6 使用DAO设计数据库应用程序简介 339
16.6.1 DAO简介 339
16.6.2 DAO和MFC 339
16.6.3 使用MFC DAO类编程 340
小结 341
练习题 341
第17章 异常和异常处理 343
17.1 异常处理的基本思想 343
17.2 异常对象 346
17.3 MFC的异常类 348
17.3.1 CException类 348
17.3.2 CException类的子类 348
小结 349
练习题 350
附录A 数据类型与Windows句柄 351
附录B 标识符的匈牙利记法 355
附录C MFC的消息映射 357
附录D 文档/视图框架的补充内容 363
附录E 多文档/视图框架的一个实例 369
附录F 类信息表与CObject类 375
附录G Visual C++中文件类型小结 379
参考文献 381