译者序 1
前言 1
第1章 体系结构 1
1.1 MFC的主要成员 2
1.1.1我的程序与上述不同 5
1.1.2军官能力测试 5
1.1.3框架窗口 6
1.1.4消息映射 7
1.1.5消息传递 10
1.1.6文档模板 11
1.2 细节 11
1.2.1 CwinApp 11
1.2.2 Cview 13
1.2.3 CDocument 15
1.2.4 CFrameWnd和有关的类 16
1.2.5 CDocTemplate 17
1.2.6 在运行时浏览对象 19
1.3 支持对象 20
1.3.1 CWnd对象 21
1.3.2 Cobject支持 21
1.3.3 关于集合 22
1.3.4 使用模板 22
1.3.5 集合细节 25
1.4 总结 26
1.5 框架结构实战指南 27
第2章 序列化 35
2.1 持久性与存储器 35
2.2 快速浏览CArchive 36
2.3 文件打开和保存的内幕 37
2.4 提供一个定制的对话框 40
2.5 另外一个示范程序 47
2.5.1探究CDib 48
2.5.2示范程序 48
2.6 序列化对象 50
2.7 处理多个版本 51
2.8定制序列化 54
2.9 简单的定制 56
2.10 可移动性问题 57
2.11 总结 57
2.12 序列化实战指南 58
第3章 打印 61
3.1 MFC打印——大谎言 62
3.1.1难题 64
31.2一个完整的打印示范程序 65
3.2 定制打印预览 70
3.2.1实现打印预览 71
3.2.2一个定制打印预览的示范程序 72
3.2.3高级定制 75
3.2.4衍生新类 75
3.2.5预览内部信息 75
3.2.6创建一个可编辑的打印预览 76
3.3 总结 79
3.4 打印实战指南 79
第4章 窗口、视和控件 82
4.1.1修改控件 83
4.1 改进的CListCtrl类 83
4.1.2显示选中项 85
4.1.3使用修改后的列表 86
4.1.4对话框控件 87
4.2 一般窗口操作 88
4.2.1设置窗口风格及初始化状况 88
4.2.2定制窗口类 89
4.2.3限制窗口尺寸 90
4.2.4设置标题 93
4.2.5使用UpdateCmdUI 93
4.3 关于CscrollView 93
4.3.1增加键盘滚动 94
4.3.2优化滚动 97
4.3.3在多于32K个单元中实现滚动 99
4.4 关于CEditView 103
4.4.1修补CEditView 103
4.4.2 CEditView和分隔条 107
4.5 有关CRichEditView 109
4.6 操作自画控件 114
4.6.1MFC的解决办法:self-draw 114
4.6.2其他解决办法 114
4.6.3使用self-draw控件 118
4.6.4 self-draw列表框和组合框 120
4.6.5self-draw菜单 122
4.7 对话框中的编辑树或列表视项 123
4.8.1用户看到什么 125
4.8.2编程分隔 125
4.8 分隔窗口 125
4.8.3嵌套分隔 126
4.8.4为何不使用CSplitterWnd? 128
4.9 总结 129
4.10 窗口、视和控件的实战指南 129
第5章 对话框 134
5.1 MFC和对话框 134
5.2 实现非模态对话框 135
5.3 使用DDX/DDV 136
5.3.1有关数据验证 139
5.3.2现场数据验证 139
5.3.3其他数据映射技巧 142
5.3.4添加定制的DDX/DDV 142
5.3.5与Class Wizard集成 145
5.4 使用对话条 146
5.5 定制通用对话框 152
5.5.1逐步定制 152
5.5.2颜色对话框的示范程序 153
5.5.3定制文件打开对话框 154
5.6 总结 156
5.7 对话框实战指南 156
第6章 属性页和向导 160
6.1 属性页总览 161
6.2 使用单个模板 162
6.3 非模态属性页 168
6.4 定制App Wizard 173
6.4.1创建一个向导 174
6.4.2调制定制器 175
6.4.3创建项目 176
6.4.4其他选项 177
6.4.5按下On 178
6.4.6调试向导 181
6.4.7有关向导的更多想法 182
6.5 总结 182
6.6 属性页和向导实战指南 182
第7章 DLL和MFC 185
7.1 链接过程 186
7.2 语言考虑 186
7.3 使用一般的DLL 186
7.4 创建一个普通DLL 188
7.4.1主文件 188
7.4.2输出函数 190
7.4.3私有和共享变量 192
7.5 MFC DLL 193
7.6 讨论一些OLE(或者ActiveX)DLL 196
7.7 总结 196
7.8 DLL和MFC实战指南 196
第8章 ActiveX 198
8.1 什么是ActiveX对象 199
8.2 ActiveX和OOP 200
8.2.1 ActiveX封装性 200
8.2.2 ActiveX重用性 200
8.2.3 ActiveX多态性 201
8.3 接口 201
8.4 ActiveX和MFC 202
8.3.4名称与数字 202
8.3.2方法 202
8.3.3事件 202
8.3.1属性 202
8.5 MFC和ActiveX控件 208
8.5.1使用控件向导 209
8.5.2添加属性 211
8.5.3使用环境属性 211
8.5.4添加方法 212
8.5.5添加事件 212
8.5.6添加属性页 213
8.5.7检查已经产生的文件 213
8.5.8测试和使用控件 213
8.6 一个简单的控件 214
8.7 使用ActiveX控件 221
8.8 总结 224
8.9 ActiveX实战指南 224
第9章 MFC和Interntet 228
9.1 Internet入门 228
9.1.1TCP/IP 229
9.1.2套接字 229
9.1.3协议 230
9.2 HTTP内幕和URL 230
9.3 ISAPI 231
9.4 ActiveX和Java 231
9.5 MFC套接字 231
9.5.1与Csocket一起使用CArchive 232
9.5.3阻塞调用 233
9.5.4例子 233
9.5.2更进一步:CAsyncSocket 233
9.5.5基本框架 234
9.5.6添加一个定制的套接字 244
9.5.7其他一些考虑 244
9.5.8总结套接字 245
9.6 高层协议 245
9.6.1链接检测器 246
9.6.2其他观点 253
9.7 ActiveX的Internet支持 253
9.8 ISAPI支持 255
9.8.1计划 256
9.8.2五月一十二月婚礼 257
9.8.3快速浏览ISAPI 262
9.8.4 编写HILO.DLL服务器 263
9.8.5 研究这个C++DLL 265
9.8.6安装和分发 267
9.8.7 未来方向 267
9.9传统的MFC ISAPI 268
9.10总结 271
9.11MFC和Internet实战指南 271
第10章 MFC和数据库 274
10.1详细介绍数据库 279
10.2添加更多的功能 280
10.3添加和删除记录 280
10.4不使用视 280
10.5示范程序 280
10.7总结 285
10.6 研究示范程序 285
10.8 MFC和数据库实战指南 286
第11章 多线程技术 289
11.1线程和进程 289
11.2线程有关问题 289
11.3线程和MFC 290
11.4 创建一个MFC工作者线程 291
11.5创建一个MFC用户界面线程 291
11.6操作线程 291
11.7 了解返回值 292
11.8线程同步 293
11.9同步化对象的类型 293
11.10线程的替代方法 294
11.11示范应用程序 295
11.13多线程技术实战指南 300
11.12总结 300
第12章 终点 304
12.1学无止境 305
12.2 未来的东西 305
12.3其他资源 306
附录A 有关外壳图标处理过程 308
A.1外壳扩展的类型 308
A.2 什么时候不使用外壳扩展 309
A.3 关于COM对象 309
A.4 外壳扩展就这样结束了吗? 316
附录B MFC源代码指南 317
B.1 源代码的正确使用 317
B.2 最漫长的旅行 317
CD中的内容 329