第1章 Visual C++ 的集成开发环境 1
1.1 Visual C++ 的外观 2
1.1.1 项目工作区 2
1.1.2 输出区 3
1.1.3 程序与资源编辑区 3
1.1.4 调试时可查看的窗口 3
1.2 如何通过 Application Wizard 生成一个新的项目 3
1.3 执行项目 7
1.4 这个新项目产生了什么文件 9
1.5 资源的编辑 10
1.6 菜单与选项的编辑 11
1.7 对话框的编辑 13
1.8 工具栏的编辑 14
1.9 鼠标指针的编辑 15
1.10 图标的编辑 16
1.11 加速键的编辑 17
1.12 字符串表的编辑 18
1.13 查看 Source Symbol 与 ID 数值的更改 19
1.14 Class Wizard 20
1.14.1 成员函数的拦截 20
1.14.2 消息映射与消息响应函数 22
1.14.3 另一个设置消息映射的方法 22
1.14.4 在 Class Wizard 设置用户界面的消息映射 23
1.14.5 ID 映射的成员变量 24
1.15 Visual C++ 的调试功能 25
1.15.1 Debug 时可查看的窗口 25
1.15.2 程序变量窗口 25
1.15.3 监视窗口 26
1.15.4 函数调用堆栈窗口 26
1.15.5 内存窗口 27
1.16 进入调试模式 28
1.15.7 Disassembly 窗口 28
1.15.6 寄存器窗口 28
1.16.1 设置断点 29
1.16.2 单步执行 29
1.16.3 TRACE 宏 31
1.16.4 ASSERT 宏 32
1.16.5 DataTips 弹出消息 33
1.16.6 调试时的画面 33
1.17 Visual C++ 的在线帮助说明 33
第2章 复习 C++ 语言 35
2.1 面向对象 36
2.2 类与对象 36
2.3 封装与继承 38
2.3.1 成员的权限属性 39
2.3.2 继承时成员名称冲突 41
2.4 Visual C++ 的 Win32 Console Application 42
2.5 友函数与友类 44
2.6 this 关键字 46
2.7 类型转换 47
2.8 虚拟函数、动态链接与多态 49
2.9 虚拟函数表 51
2.10 多重继承与虚拟基础类 52
2.10.1 多重继承的第1个问题 53
2.10.2 多重继承的第2个问题 55
2.11 父类化与对象转换 58
2.12 函数名称重载与运算符重载 59
2.13 构造函数与析构函数 62
2.14 动态内存配置——new 与 delete 65
2.15 宏与内联函数 66
2.16 异常处理 68
2.17 模板 70
2.17.1 Function 模板 70
2.17.2 Class 模板 71
第3章 MFC APPlication Wizard 生成的程序框架剖析 73
3.1 程序的进入点 74
3.2 生成一个 ExTrace 工程 76
3.3 剖析 ExTrace 工程各个函数的执行顺序 87
3.3.1 OnIdle 函数 90
3.3.2 框架函数的层次关系 91
3.3.3 InitInstance 函数 92
3.3.4 Run 函数 93
3.3.5 ProcessShellCommand 函数 93
3.3.6 关闭窗口 97
3.4 文档模板 98
3.5 DECLARE_DYNCREATE 与 IMPLEMENT_DYNCREATE 宏 100
3.6 RUNTIME CLASS 模板 102
3.7 DECLARE_SERIAL 与 IMPLEMENT_SERIAL 宏 104
3.8.1 获得四大对象的指针 107
3.8 框架四大对象之间的关系 107
3.8.2 可获得有效 Frame 对象指针的时机 109
3.8.3 可获得有效 View 对象指针的时机 110
3.8.4 可获得有效 Doc 对象指针的时机 111
3.9 消息映射 112
第4章 菜单 119
4.1 系统菜单与标题 120
4.2 下拉式菜单 122
4.2.1 菜单的生成 123
4.2.2 CMenu 类 125
4.3 弹出式菜单 128
4.4 范例:ExMenu 128
4.4.1 窗口外框与系统菜单 129
4.4.2 菜单 132
4.4.3 弹出式菜单 134
4.4.4 我的菜单 135
4.4.5 附加/取消“新加的菜单” 136
4.4.6 添加/取消选项三 138
4.4.7 默认菜单 138
第5章 状态栏与工具栏 141
5.1 类继承层次 142
5.2 状态栏的生成与更新 142
5.2.1 CStatusBar 类与状态栏对象指针的获得 144
5.2.2 工具栏 146
5.2.3 CToolBar 类 147
5.3 范例:ExBars 151
5.3.1 菜单、状态栏与工具栏 151
5.3.2 状态栏上的时钟与 OnIdle 函数 153
5.3.3 “默认工具栏”与“自定工具栏”的生成 156
5.3.4 “弹出式工具栏”的生成 158
5.3.5 “弹出式工具栏”的消失 160
5.3.6 菜单上的工具栏控制 162
第6章 鼠标、键盘与窗口外框 165
6.1 鼠标的按钮与移动 166
6.2 鼠标指针 168
6.3 键盘 169
6.4 窗口外框 171
6.4.1 窗口外框大小 172
6.4.2 客户区的大小 173
6.4.3 动态分割窗口 176
6.4.4 静态分割窗口 177
6.5 范例:ExDynamicWin 178
6.6 范例:ExStaticWin 181
6.6.1 两个静态分割窗口 181
6.6.2 三个静态分割窗口 182
6.6.3 冻结静态分割窗口分割线 184
6.6.4 鼠标的移动 186
6.6.5 鼠标指针 188
6.6.6 鼠标按钮与键盘 189
6.6.7 鼠标 Capture 192
6.6.8 总结 193
第7章 对话框 195
7.1 对话框的类继承层次 196
7.2 对话框的生成 196
7.3 对话框的数据存取 196
7.4 对话框控件 197
7.5 特殊的对话框 216
7.6 对话框与其控件的颜色 222
7.7 UpdateData 与 DDX、DDV 机制 224
7.8 范例:ExModal 225
7.9 范例:ExModeless 232
第8章 FormView 视图与对话框控件的应用 235
8.1 范例:ExDialogs 236
8.1.1 窗口外框与对话栏 238
8.1.2 IDD_EXDIALOGS_FORM 对话框 240
8.1.3 初始控件 242
8.1.4 IDD_FLASHVIEW 对话框 251
8.1.5 对话栏的按键 253
8.1.6 在客户区切换显示的对话框 254
8.1.7 多属性页的属性单 255
8.1.8 对话框之间的数据交换 257
8.1.9 多属性页的显示位置 260
8.1.10 多属性页对话框的按钮位置 261
8.2 Dialog based 应用程序 261
8.3 范例:ExDlgBased 262
第9章 绘图 269
9.1 MFC 的绘图原理 270
9.2 GDI 类 270
9.2.1 画笔类 271
9.2.2 画刷类 272
9.2.3 位图类 272
9.3.1 CPaintDC 类 273
9.3 DC 的类 273
9.2.4 字型类 273
9.3.2 CClientDC 类 274
9.3.3 CWindowDC 类 274
9.3.4 CMetaFileDC 类 274
9.4 CDC 类基本的绘图函数 275
9.4.1 CDC 类其他重要的函数 279
9.4.2 其他有关的函数 280
9.5 映射模式 281
9.6 颜色 282
9.6.1 屏幕显示的原理 282
9.6.2 Windows 系统的颜色定义 283
9.6.3 位图的颜色定义 283
9.6.4 调色板的颜色 284
9.7 位图 285
9.7.1 BITMAPFILEHEADER 285
9.7.2 BITMAPINFOHEADER 286
9.7.3 RGBQUAD[] 287
9.7.4 图像 287
9.7.5 位图 287
9.8 MFC 的客户区绘图机制 288
9.9 范例:ExDraw 289
9.9.1 窗口外框与客户区尺寸设置 290
9.9.2 绘图时的闪烁现象 291
9.9.3 本范例解决闪烁现象的构想 292
9.9.4 数据初始化 292
9.9.5 画图 296
9.9.6 Ball 的移动与球的碰撞 299
9.9.7 Sphere 的移动 302
9.9.8 对话栏 303
第10章 文件读写 307
10.1 Stream I/O 308
10.3 Collection 类 309
10.2 串行化机制 309
10.4 MFC 程序框架的文件读写功能 313
10.5 范例:ExSerialize 314
10.5.1 数据定义与 Serialize 函数 314
10.5.2 数据初始化 317
10.5.3 默认数据 318
10.5.4 数据显示 320
10.5.5 执行程序 322
10.5.6 数据在文件中的格式 323
10.6 新建 325
10.7 打开 328
10.8 本范例 Serialize 函数读取数据的操作 334
10.9 另存为 344
10.10 保存 346
问题 353
第11章 打印与预览 355
11.1 MFC 框架的打印与预览功能 356
11.2 打印设置 356
11.3 打印预览 358
11.4 打印 368
11.5 范例:ExPrint 384
11.5.1 主窗口 385
11.5.2 菜单 386
11.5.3 打开文件 388
11.5.4 准备字型 392
11.5.5 屏幕显示 394
11.5.6 OnDraw 函数 394
11.5.7 打印与打印预览 395
11.5.8 OnPrint 函数 398
第12章 多线程 403
12.2 如何控制线程 404
12.2.1 工作线程的生成与结束 404
12.1 进程与多线程 404
12.2.2 UI 线程的生成与结束 406
12.2.3 线程的执行优先权 406
12.2.4 线程的暂停与继续 406
12.2.5 线程的同步 407
12.2.6 数据同步的问题 407
12.3 MFC 的同步类 408
12.3.1 CEvent 类 409
12.3.3 CCriticalSection 类 414
12.3.4 CSingleLock 类 416
12.3.5 CMultiLock 类 417
12.4 范例:ExThreads 421
12.4.1 主窗口 421
12.4.2 消息与变量 422
12.4.3 生成线程 423
12.4.4 执行进度显示 426
12.4.5 暂停/恢复执行 427
12.4.6 执行结果 428
12.5 范例:ExCOMPPI 429
12.5.1 主窗口 430
12.5.2 工具栏的按钮 433
12.5.3 生成目标数据 437
12.5.4 显示目标数据 438
12.5.5 COM 的控制 441
12.5.6 线程 443
12.5.7 送出数据 444
12.5.8 接收数据 448
12.5.9 其他辅助显示 452
12.5.10 开始与停止模拟 454
附录 A Visual C++ 的范例介绍 459
附录 B MFC 类表 467
附录 C MFC 一般宏全局函数与变量 469