第一部分 Visual C++和MFC基础 1
第1章 概论 1
1.1 什么是微软基础类库 1
1.2 Windows术语 2
1.3 事件驱动软件和术语 4
1.4 一个例子 5
1.5 总结 7
第2章 理解一个MFC程序 8
2.1 MFC简介 8
2.2 设计一个程序 9
2.3 理解“HelloWorld”程序的代码 10
2.4 编译这个程序 16
2.5 MFC应用程序的结构 17
2.6 总结 18
3.1 基本知识 19
第3章 定制控件 19
3.2 CStatic的风格 21
3.3 CStatic文本的显示 22
3.4 CStatic的矩形显示风格 28
3.5 字体 31
3.6 总结 32
4.1 理解消息映像 33
4.2 CButton类 33
第4章 事件处理 33
4.3 创建一个消息映像 35
4.4 尺寸调节消息 37
4.5 窗口消息 40
4.6 滚动条控件 42
4.4 理解消息映像 46
4.8 总结 47
第5章 简单应用程序 48
5.1 设计应用程序 48
5.2 实现华氏——摄氏温度转换器 49
5.3 CEdit控件 54
5.4 利息计算器 57
5.5 总结 61
第二部分 Visual C++和MFC细节 64
第6章 资源、对话框和菜单 64
6.1 资源和资源文件 64
6.2 图标资源 66
6.3 创建资源文件 68
6.4 菜单 70
6.5 响应菜单 73
6.6 对话框资源 77
6.4 字符串资源 83
6.8 总结 86
第7章 封装的对话框 87
7.1 消息对话框 87
7.2 文件打开/保存对话框 90
7.3 字体对话框 96
7.4 颜色对话框 98
7.5 打印对话框 100
7.6 查找/替换对话框 102
7.7 总结 107
第8章 编辑控件和编辑器 108
8.1 以单行模式使用CEdit控件 108
8.2 以多行模式使用CEdit控件 110
8.3 设计简单的文本编辑器 113
8.4 创建文本编辑器应用程序 115
8.5 加入菜单处理器代码存根 118
8.6 实现编辑器 125
8.7 总结 138
第9章 列表 139
9.1 创建列表框 139
9.2 替换的显示格式 142
9.3 获取用户选择 145
9.4 操作列表中的项 150
9.5 组合框 151
9.6 总结 153
第10章 CWinApp类 154
10.1 成员变量 154
10.2 图标和光标 156
10.3 处理空闲时间 160
10.4 应用程序功能 160
10.5 初始化特征 165
10.6 其它特征 166
10.7 总结 166
第11章 绘图 167
11.1 GDI库入门 167
11.2 GDI基本知识 167
11.3 设备环境 169
11.4 简单绘图 171
11.5 在绘图时使用鼠标 193
11.6 高级绘图概念 221
11.7 总结 233
第12章 工具类 234
12.1 工具类 235
12.2 简单数组类 249
12.3 CObject 类和CObject数组 253
12.4 列表类 262
12.5 映射类 266
12.6 总结 269
第13章 调试和完备性 270
13.1 设置 270
13.2 维护 270
13.3 跟踪 275
13.4 转储 277
13.5 内存状态 279
13.6 异常情况 282
13.8 总结 291
13.7 其它调试特性 291
第三部分 使用Visual C++向导 293
第14章 理解AppWizard和ClassWizard 293
14.1 AppWizard的目标 294
14.2 使用AppWizard创建一个简单的框架 294
14.3 AppWizard的以文档为中心的方案 295
14.4 理解AppWizard的文件 296
14.5 理解ClassWizard 299
14.6 总结 301
第15章 创建一个绘图程序 302
15.1 应用程序的目的 302
15.2 创建一个绘图程序 303
15.3 理解这个绘图程序 311
15.4 创建一个MDI应用程序 316
15.5 翻屏 319
15.6 分割窗口 324
15.7 添加新的菜单选项和对话框 334
15.8 打印 341
15.9 总结 348
第16章 用CEdit View创建编辑器 349
16.1 创建一个MDI文本编辑器 349
16.2 理解这个编辑器 349
16.3 一个应用程序兼有两种文档和视图 351
16.4 解决一个细小问题 354
16.5 处理一个文档上的多个视图 354
16.6 总结 355
第17章 创建一个华氏-摄氏温标转换器 356
17.1 创建温标转换器 356
17.2 理解这个程序 358
17.3 使用DDX 359
17.4 使用文档类 360
17.5 使用Form视图 364
17.6 总结 364
18.1 创建这个应用程序 365
第18章 创建一个地址列表应用程序 365
18.2 理解地址列表程序 374
18.3 理解DDX和DDV 376
18.4 改进这个应用程序 377
18.5 打印 392
18.6 总结 397
第19章 上下文在线帮助 398
19.1 了解AppWizard的帮助框架 398
19.2 理解和修改帮助文件 399
19.3 上下文在线帮助 404
19.4 别名 406
19.5 总结 407
第20章 普通控件 408
20.1 一个关于使用微调按钮、列表和树结构控件的简单例子 408
20.2 微调按钮控件 409
20.3 列表控件 409
20.4 树结构控件 411
20.5 属性表 412
20.6 属性表的一个实例 413
20.7 CPropertySheet类 413
20.8 OCX控件 415
20.9 总结 415
第21章 建立explorers 416
21.1 创建基本框架 416
21.2 总结 420
第四部分 高级特性 421
第22章 对话框数据的交换和确认 421
22.1 理解DDX 422
22.2 交换例程 422
22.3 传递的方向 423
22.4 了解DDV 424
22.5 一个实例 425
22.6 定制例程 429
22.7 总结 431
第23章 了解MFC 432
23.1 什么是窗口的句柄 432
23.2 窗口和对象的生命期 433
23.3 初始化对话框 434
23.4 从HWND到CWnd 435
23.5 永久和暂时的连接 436
23.6 其它对象的句柄 436
23.7 消息是怎样工作的 437
23.8 派生子类 438
23.9 总结 439
第24章 增强编辑控件的功能 440
24.1 一个例子 440
24.2 理解该程序的工作过程 441
24.3 总结 441
25.2 所有者绘制消息 442
25.1 所有者绘制和自绘制 442
第25章 自管理控件 442
25.3 自绘制框架 443
25.4 现象背后 443
25.5 一般的解决方法 443
25.6 自绘制组合框 445
25.7 绘制透明位图 448
25.8 派生组合框 451
25.9 总结 452
第26章 再谈自绘列表框 453
26.1 字体枚举的介绍 453
26.2 枚举字体家族 454
26.3 枚举字体风格 456
26.4 实例 458
26.5 总结 461
第27章 创建初始画面 462
27.1 实例 462
27.2 结论 465
28.1 CExpandingDialog类 466
第28章 可扩展对话框 466
28.2 实例 471
28.3 总结 472
第29章 绘图和控件 473
29.1 在CStatic控件中绘图 473
29.2 在对话框中绘图 475
29.3 对话框控件和背景 477
29.4 结论 477
第30章 对话条 478
30.1 实例 478
30.2 数据交换 480
30.3 结论 481
31.1 空闲更新怎么工作 482
31.2 视图中的空闲更新 482
第31章 对话和视图空闲时的命令更新 482
31.3 一个例子 483
31.4 对话框中的空闲更新 484
31.5 一个例子 485
31.6 总结 486
第32章 零散的话题和结束语 487
32.1 从文件管理器接收文件 487
32.4 非模式化的对话框 488
32.3 以最小化的状态启动应用程序 488
32.2 使应用程序成为最前端接口 488
32.5 小型框架窗口 490
32.6 上下文弹出式菜单 493
32.7 修改系统菜单 494
32.8 总结 494
第五部分 高级MFC类 495
第33章 数据库访问 495
33.1 理解关系型数据库 495
33.2 理解SQL 497
33.3 理解DDBC 500
33.4 Microsoft Query 501
33.5 CRecordSet类 505
33.6 简单的CRecordSet操作 506
33.7 使用CRecordview类 515
33.8 增加和删除记录 518
33.9 总结 519
第34章 OLE 521
34.1 理解OLE 521
34.2 一个例子 524
34.3 展望OLE的未来发展 527
34.4 标准OLE特性 527
34.5 OLE容器介绍 530
34.6 OLE服务器介绍 536
34.7 OLE自动操作介绍 543
34.8 OLE控件介绍 546
34.9 总结 555
第35章 MFC线程 556
35.1 理解可能性 556
35.2 理解线程 557
35.3 MFC工作线程 559
35.4 线程终止 560
35.5 向线程传递参数 563
35.6 悬挂和恢复线程 564
35.7 线程优先级 565
35.8 派生CWinThread的子类 570
35.9 用户界面线程 578
35.10 总结 580
第六部分 附录 581
A进一步介绍C++ 581
B使用Visual C++的编译器和工具 642
C 与作者联系 679
D 在MFC中使用OpenGL 680