第1章 面向对象编程 1
1.1 面向对象的基本概念 1
1.1.1 类和对象 1
1.1.2 封装、多态和继承 2
1.1.3 消息 3
1.2 面向对象的建模技术和UML 4
1.2.1 类图 4
1.2.2 交互图 10
1.2.3 用例图 11
1.3 面向对象的C++语言 12
1.3.1 C++对象的内存布局 14
1.3.2 C++编程技术要点 17
1.4 小结 36
第2章 窗口 37
2.1 窗口结构 37
2.2 窗口类型 39
2.3 窗口关系 41
2.4 消息和消息处理 47
2.4.1 系统定义的消息 47
2.4.4 消息队列 49
2.4.3 消息参数 49
2.4.2 应用程序定义的消息 49
2.4.5 消息循环 52
2.4.6 窗口过程 55
2.5 窗口应用框架 58
2.6 小结 61
第3章 MFC简介 63
3.1 MFC的优势 63
3.2 MFC中的类 64
3.3 用MFC开发应用的基本方法 66
3.4.1 C++窗口对象和Windows窗体之间的关系 71
3.4 MFC中的窗口管理 71
3.4.2 创建窗口 72
3.4.3 销毁窗体 79
3.4.4 定位窗体 80
3.4.5 绘图 84
3.4.6 消息处理 86
3.5 小结 94
第4章 CObject类 97
4.1 概述 97
4.2 创建对象 98
4.2.1 直接构造 98
4.2.2 使用new操作符 100
4.3 诊断功能 102
4.3.1 Dump成员 102
4.3.2 AssertValid 104
4.4 运行时类信息 106
4.4.1 CRuntimeClass结构 106
4.4.2 添加运行时类信息 110
4.4.3 IsKindOf 111
4.5 动态创建 111
4.6 序列化 113
4.6.1 添加序列化支持 113
4.6.2 CArchive类 115
4.6.3 对象序列化实例 119
4.7 小结 120
第5章 MFC应用框架 123
5.1 应用程序对象和MFC类库的交互 123
5.2 应用程序的初始化 125
5.3 消息循环 128
5.4 空闲处理 131
5.5 应用程序的退出 134
5.6 CWinApp提供的其他服务 135
5.6.3 跟踪最近使用的文档 136
5.6.2 文件管理器拖放 136
5.6.1 外壳程序注册 136
5.7 小结 137
第6章 消息映射 139
6.1 基本概念 139
6.2 消息映射表 140
6.3 一般窗口消息的处理成员的定位 144
6.4 命令处理成员的定位 148
6.5 消息映射宏 150
6.5.1 窗口消息映射宏 150
6.5.2 命令映射宏 155
6.5.3 控件通知消息映射宏 158
6.5.4 通知消息映射宏 159
6.5.5 反射消息映射宏 161
6.6 小结 163
第7章 消息处理 165
7.1 处理标准窗口消息 165
7.1.1 处理WM_CREATE消息 166
7.1.2 处理WM_DESTROY消息 167
7.1.3 处理WM_NCDESTROY消息 168
7.1.4 处理WM_CLOSE消息 170
7.2 处理命令消息 173
7.3 处理反射消息 180
7.4 投递和发送消息 183
7.4.1 投递和发送消息的概念 184
7.4.2 PostMessage函数 184
7.4.3 SendMessage函数 185
7.4.4 SendNotifyMessage和SendMessageCallback 187
7.5 使用自定义命令 189
7.6 使用自定义窗口消息 191
7.7 使用登记消息 194
7.8 处理线程消息 196
7.9 跨进程处理消息 197
7.10 使用消息跨进程交换数据 200
7.11 消息钩子 205
7.11.1 钩子和过滤器 205
7.11.2 钩子的类型和范围 206
7.11.3 安装和解除消息钩子 208
7.11.4 使用线程范围的钩子实例 210
7.11.5 使用全局钩子实例 214
7.12 小结 222
8.1 对话框的生存期 225
8.1.1 对话框的创建 225
第8章 对话框 225
8.1.2 对话框的初始化 232
8.1.3 对话框的消息处理 234
8.1.4 对话框的结束 238
8.2 数据交换和数据验证 242
8.3 使用通用对话框 248
8.3.1 基本用法 248
8.3.2 定制通用对话框 251
8.4 运行时修改对话框 254
8.5 作为子窗口的对话框 256
8.6 TML对话框 258
8.6.1 HTML资源 259
8.6.2 让HTML全部可见 262
8.6.3 混合HTML元素和窗口控件设计对话框 263
8.6.4 HTML消息处理 265
8.6.5 HTML元素和对话框成员间的数据交换 281
8.6.6 导航 283
8.6.7 基于HTML对话框的应用实例 286
8.7 使用属性表 290
8.8 使用对话栏 295
8.8.1 创建 296
8.8.4 访问对话栏成员 297
8.8.3 处理控件消息 297
8.8.2 销毁 297
8.8.5 实例 298
8.9 小结 298
第9章 文档和视图 299
9.1 文档/视图结构 299
9.1.1 原理 299
9.1.2 为什么使用文档/视图结构 300
9.1.3 基于文档/视图结构的应用 301
9.2 文档/视图结构的创建 303
9.2.1 文档模板的创建 304
9.2.2 文档的创建 308
9.2.3 框架的创建 311
9.2.4 视图的创建 318
9.2.5 文档/视图的初始化 320
9.3 深入文档模板 322
9.3.1 文档模板管理器 322
9.3.2 文档模板的创建 330
9.3.3 管理文档 332
9.3.4 其他 338
9.4 文档对象 338
9.4.1 文档的初始化 338
9.4.2 保存文档 340
9.4.3 设置修改标志和保存修改 341
9.4.4 关闭文档 342
9.4.5 管理视图 343
9.4.6 文档的销毁 345
9.4.7 命令处理 346
9.4.8 文档的序列化 348
9.4.9 设计文档的成员 350
9.5 视图对象 351
9.5.1 视图的初始化 351
9.5.2 视图和文档间的数据交换 354
9.5.3 视图的绘制 355
9.5.4 视图的销毁 356
9.6 框架窗口 357
9.6.1 初始化 357
9.6.2 和文档的交互 362
9.6.3 和视图的交换 364
9.6.4 命令处理 365
9.6.5 确定视图大小 366
9.6.6 为框架添加其他子控件 371
9.7 打印 373
9.7.1 文档/视图框架中的打印流程 373
9.7.2 自定义打印 383
9.7.3 打印预览 385
9.8 小结 386
第10章深入视图 387
10.1 拆分 387
10.1.1 视图的创建 388
10.1.2 拆分窗口的命令处理 396
10.1.3 对拆分子窗口的管理 397
10.1.4 绘制 398
10.2 滚动和缩放 403
10.2.1 滚动 403
10.2.2 缩放视图 413
10.3 控件视图 416
10.4 窗体视图 420
10.5 基于HTML的视图——CDHtmlView 425
10.5.1 加载HTML 425
10.5.2 事件处理 426
10.5.3 在新的文档中打开HTML 434
10.6 小结 436
第11章GDI绘图 437
11.1 GDI绘图的编程模型 437
11.1.2 设备上下文 438
11.1.1 逻辑空间和设备空间 438
11.1.3 GDI对象 446
11.1.4 坐标变换和坐标映射 450
11.2 绘制图形 458
11.2.1 画线 458
11.2.2 绘制矩形 459
11.2.3 绘制椭圆 460
11.2.4 绘制弧线 461
11.2.5 绘制多边形 462
11.2.6 绘制贝济埃样条 463
11.2.7 使用路径 464
11.2.8 填充 470
11.2.9 区域 473
11.3 使用图像 482
11.3.1 位图的结构 482
11.3.2 位图类型 483
11.3.3 图像的初始化和销毁 484
11.3.4 从文件加载图像文件 487
11.3.5 将图像保存为文件 488
11.3.6 图像的显示、裁剪和缩放 489
11.3.7 图像处理 492
11.4 小结 500
第12章GDI+绘图 501
12.1 GDI+编程模型 501
12.1.1 GDI+的组成 502
12.1.2 GDI+的功能 502
12.1.3 GDI+编程步骤 502
12.1.4 新增功能 508
12.2 绘制基数样条曲线 509
12.3 独立的路径对象 510
12.4 Alpha混合 512
12.4.1 在钢笔中应用Alpha混合 512
12.4.2 在画刷中应用Alpha混合 513
12.4.3 对图像应用Alpha混合 514
12.5 渐变 520
12.5.1 线性渐变 521
12.5.2 轨迹渐变 522
12.6 变换和矩阵对象 529
12.7 使用图像 535
12.8 小结 544
第13章进程和线程 547
13.1 基本理论 547
13.1.1 什么是进程 547
13.1.3 进程地址空间 548
13.1.2 什么是线程 548
13.1.4 线程的生命周期 549
13.2 创建子进程 549
13.3 虚拟内存管理 552
13.4 进程间内存共享 555
13.5 用户界面线程 561
13.5.1 创建 561
13.5.2 退出 564
13.5.3 线程间通信 564
13.6.1 创建 565
13.6 辅助线程 565
13.6.2 退出 567
13.6.3 线程间通信 569
13.7 线程安全措施 571
13.7.1 需要采取线程安全措施的对象 572
13.7.2 线程安全的实现 573
13.8 小结 577
第14章动态链接库 579
14.1 简介 579
14.1.1 DLL的构成 580
14.1.2 到DLL的链接 582
14.1.3 DLL映射到进程空间 585
14.1.4 使用动态链接的好处 586
14.2 规则DLL创建及其使用 587
14.2.1 创建规则 DLL 588
14.2.2 规则DLL的使用 594
14.2.3 输出全局变量 599
14.2.4 输出类 600
14.2.5 输出进程间共享的数据 604
14.3 进程状态、模块状态和线程状态 606
14.3.1 线程局部存储 607
14.3.2 模块状态 616
14.4.1 创建 621
14.4 创建和使用扩展DLL 621
14.4.2 使用 631
14.5 DLL中的资源 637
14.5.1 资源的名字和类型 638
14.5.2 确定定义资源的模块 638
14.5.3 在模块中查找、加载资源 640
14.5.4 枚举资源 642
14.5.5 修改可执行文件的资源 648
14.5.6 纯资源DLL 651
14.5.7 附属DLL 655
14.6 小结 657
15.1 COM基础知识 659
第15章COM组件编程 659
15.1.1 COM中的接口 660
15.1.2 COM对象的线程模型 663
15.1.3 进程内组件和进程间组件 664
15.1.4 COM库 665
15.2 IUnknown接口在MFC中的实现 669
15.2.1 内部类 670
15.2.2 接口映射表 673
15.2.3 聚合的实现 674
15.3.1 COleObjectFactory类 679
15.3 类厂及其MFC实现 679
15.3.2 全局类厂链 680
15.3.3 类厂的注册/反注册 680
15.3.4 类厂对象的创建 680
15.3.5 类厂对象创建COM对象 680
15.3.6 为CCmdTarget添加类厂支持 682
15.4 用MFC实现简单的COM组件 683
15.4.1 创建支持自动化的规则DLL 683
15.4.2 定义接口文件 683
15.4.3 实现被聚合的COM组件 684
15.4.4 实现包容组件 686
15.4.5 编译、注册COM组件 688
15.4.6 创建一个对话框应用 688
15.5 双重接口 691
15.5.1 调度表 691
15.5.2 COleDispatchImpl 692
15.5.3 m_xDispatch成员 692
15.5.4 输出IDispatch接口 693
15.5.5 双重接口的客户端 693
15.5.6 范例 695
15.6 可连接对象及其MFC实现 695
15.6.1 用CCmdTarget实现可连接对象 697
15.6.2 可连接对象的客户端 698
15.7 封送的应用:在线程间传递接口指针 702
15.8 小结 703
第16章.NET应用开发 705
16.1 C++托管扩展简介 705
16.1.1 什么是.NET平台 705
16.1.2 托管C++中的类型 706
16.1.3 托管C++的用途 707
16.1.4 为MFC应用添加托管支持 707
16.1.5 使用.NET类型 708
16.1.6 实例:创建托管类型 709
16.1.7 装箱:值类型到引用类型的转化 710
16.1.8 托管类型和非托管类型的混用 711
16.1.9 固定指针 712
16.2 常用的托管C++编程技能 713
16.2.1 声明托管类 713
16.2.2 声明值类型的托管类型 715
16.2.3 添加属性 716
16.2.4 定义及实现接口 717
16.2.5 托管数组 720
16.2.6 处理异常 721
16.2.7 定义和使用委托 723
16.2.8 创建对象 726
16.2.9 对象的序列化和反序列化 728
16.2.10 用ADO.NET访问数据库 730
16.2.11 断言和条件编译 735
16.3 具有双重接口功能的规则DLL 738
16.4 典型托管应用开发 741
16.4.1 控制台应用 742
16.4.2 类库应用 742
16.4.3 窗体应用 743
16.5 小结 746