第1章 MFC概述 1
1.1 MFC是一个编程框架 1
1.1.1 封装 1
1.1.2 继承 2
1.1.3 虚拟函数和动态约束 2
1.1.4 MFC的宏观框架体系 2
1.2 MDI应用程序的构成 3
1.2.1 构成应用程序的对象 3
1.2.2 构成应用程序的对象之间的关系 4
1.2.3 构成应用程序的文件 5
第2章 MFC和Win32 7
2.1 MFC Object和Windows Object的关系 7
2.2 Windows Object 9
2.2.1 Windows的注册 9
2.2.2 MFC窗口类CWnd 12
2.2.3 在MFC下创建一个窗口对象 14
2.2.4 MFC窗口的使用 15
2.2.5 在MFC下窗口的销毁 16
2.3 设备描述表 16
2.3.1 设备描述表概述 16
2.3.2 设备描述表在MFC中的实现 18
2.3.3 MFC设备描述表类的使用 20
2.4 GDI对象 21
第3章 CObject类 24
3.1 CObject类的结构 24
3.2 CObject类的特性 26
3.3 实现CObject特性的机制 28
3.3.1 DECLARE DYNAMIC等宏的定义 28
3.3.2 CRuntimeClass类的结构与功能 30
3.3.3 动态类信息、动态创建的原理 33
3.3.4 序列化的机制 34
第4章 消息映射的实现 36
4.1 Windows消息概述 36
4.1.1 消息的分类 36
4.1.2 消息结构和消息处理 37
4.2 消息映射的定义和实现 38
4.2.1 MFC处理的三类消息 38
4.2.2 MFC消息映射的实现方法 39
4.2.3 在声明与实现的内部 40
4.2.4 消息映射宏的种类 44
4.3 CCmdTarget类 47
4.4 MFC的窗口过程 48
4.4.1 MFC窗口过程的指定 49
4.4.2 对Windows消息的接收和处理 51
4.4.3 对命令消息的接收和处理 55
4.4.4 对控制通知消息的接收和处理 62
4.4.5 对更新命令的接收和处理 67
4.5 消息的预处理 71
4.6 消息映射的回顾 72
第5章 MFC对象的创建 73
5.1 MFC对象的关系 73
5.1.1 创建关系 73
5.1.2 交互作用关系 74
5.2 MFC提供的接口 75
5.2.1 虚拟函数接口 75
5.2.2 消息映射方法和标准命令消息 78
5.3 MFC对象的创建过程 80
5.3.1 应用程序中典型对象的结构 80
5.3.2 WinMain入口函数 84
5.3.3 SDI应用程序的对象创建 86
5.3.4 MDI程序的对象创建 103
第6章 应用程序的退出 110
6.1 边框窗口对WM CLOSE的处理 110
6.2 窗口的销毁过程 114
6.2.1 DestroyWindow 114
6.2.2 处理WM_DESTROY消息 114
6.2.3 处理WM_NCDESTROY消息 115
6.3 SDI窗口,MDI主、子窗口的关闭 115
第7章 MFC的DLL 117
7.1 DLL的背景知识 117
7.2 调用约定 119
7.3 MFC的DLL应用程序的类型 120
7.4 DLL的几点说明 121
7.5 输出函数的方法 123
第8章 MFC的进程和线程 125
8.1 Win32的进程和线程概念 125
8.2 Win32的进程处理简介 125
8.2.1 进程的创建 125
8.2.2 进程的终止 126
8.3 Win32的线程 127
8.3.1 线程的创建 127
8.3.2 线程的终止 127
8.3.3 线程局部存储 128
8.4 线程同步 129
8.4.1 同步对象 129
8.4.2 等待函数 130
8.5 MFC的线程处理 131
8.5.1 创建用户界面线程 131
8.5.2 创建工作者线程 132
8.5.3 AfxBeginThread 132
8.5.4 CreateThread和_AfxThreadEntry 133
8.5.5 线程的结束 136
8.5.6 实现线程的消息循环 136
第9章 MFC的状态 138
9.1 模块状态 138
9.2 模块、进程和线程状态的数据结构 139
9.2.1 层次关系 139
9.2.2 CNoTrackObject类 140
9.2.3 AFX_MODULE_STATE类 141
9.2.4 _AFX_BASE_MODULE_STATE类 143
9.2.5 _AFX_THREAD_STATE类 144
9.2.6 AFX_MODULE_THREAD_STATE类 145
9.3 线程局部存储机制和状态的实现 147
9.3.1 CThreadSlotData和_afxThreadData 147
9.3.2 线程状态_afxThreadState 150
9.3.3 进程模块状态afxBaseModuleState 152
9.3.4 状态对象的创建 153
9.4 管理状态 157
9.4.1 模块状态切换 157
9.4.2 扩展DLL的模块状态 158
9.4.3 核心MFC DLL 162
9.4.4 动态链接的规则DLL的模块状态的实现 163
9.5 状态信息的作用 164
9.5.1 模块信息的保存和管理 164
9.5.2 MFC资源、运行类信息的查找 165
9.5.3 模块信息的显示 166
9.5.4 模块-线程状态的作用 167
9.6 状态对象的删除和销毁 170
第10章 内存分配方式和调试机制 172
10.1 内存分配 172
10.1.1 内存分配函数 172
10.1.2 C++的new和delete操作符 174
10.2 调试手段 174
10.2.1 C运行库提供和支持的调试功能 174
10.2.2 MFC提供的调试手段 175
10.2.3 内存诊断 178
第11章 MFC下的文件类 180
11.1 文件操作的方法 180
11.2 MFC的文件类 180
11.2.1 CFile的结构 180
11.2.2 CFile的部分实现 183
11.2.3 CFile的派生类 185
第12章 对话框和对话框类CDialog 187
12.1 模式和无模式对话框 187
12.1.1 模式对话框 187
12.1.2 无模式对话框 188
12.2 对话框的MFC实现 188
12.2.1 CDialog的设计和实现 189
12.2.2 MFC模式对话框的实现 190
12.2.3 对话框的数据交换 202
12.3 无模式对话框 209
12.3.1 CScrollView 209
12.3.2 CFormView 211
第13章 MFC工具条和状态栏 216
13.1 Windows控制窗口 216
13.2 MFC的工具条和状态栏类 217
13.2.1 控制窗口的创建 219
13.2.2 控制条的销毁 226
13.2.3 处理控制条的位置 227
13.2.4 工具条、状态栏和边框窗口的接口 231
13.2.5 泊位和漂浮 251
第14章 SOCKET类的设计和实现 253
14.1 WinSock基本知识 253
14.1.1 WinSockAPI 253
14.1.2 Socket的使用 255
14.2 MFC对WinSock API的封装 256
14.2.1 CAsyncSocket 256
14.2.2 socket对象的创建和捆绑 257
14.2.3 异步网络事件的处理 260
14.3 CSocket 262
14.4 CSocketFile 263