第0章 你一定要知道(导读) 1
0.1 这本书适合谁 1
0.2 你需要什么技术基础 2
0.3 你需要什么样的软硬件环境 2
0.4 让我们使用同一种语言 2
0.5 本书符号习惯 5
0.6 碟片内容与安装 5
0.7 范例程序说明 5
0.8 如何与作者联系 7
0.9 与前版本之差异 7
第一篇 勿在浮砂筑高台—本书技术前提 10
第1章 Win32程序基本概念 10
1.1 Win32程序开发流程 10
1.2 需要什么函数库(.LIB) 11
1.4 以信息为基础,以事件驱动之 12
1.3 需要什么头文件(.H) 12
1.5 一个具体而微的Win32程序 13
程序人口WinMain 19
窗口类的注册与窗口的诞生 20
信息循环 21
窗口的生命中枢—窗口函数 22
信息映射(Message Map)的雏形 22
对话框的运用 24
1.6 Windows程序的生与死 26
资源定义文件(.RC) 26
1.7 闲置时间的处理:OnIdle 27
1.8 进程与线程(Process and Thread) 28
核心对象 28
一个进程的诞生与死亡 29
产生子进程 29
一个线程的诞生与死亡 31
线程的优先权(Priority) 32
2.1 类及其成员—谈封装(encapsulation) 35
第2章 C++的重要性质 35
2.2 基类与派生类—谈继承(Inheriance) 36
2.3 this指针 39
2.4 虚函数与多态性(Polymorphism) 39
从薪水说起 43
晴天霹坜 45
三个结论 45
虚函数与一般化 47
2.5 类与对象大剖析 51
2.6 Object slicing与虚函数 55
2.7 静态成员(变量与函数) 58
2.8 C++程序的生与死:兼谈构造函数与析构函数 60
2.9 动态类型识别(RTTI) 61
2.10 动态生成( Dynamic Crearion) 64
2.11 异样处理(Exception Handling) 64
Template 68
Template Functions 69
Template Classes 70
Templates的编译与链接 72
第3章 MFC六大关键技术之仿真 74
3.1 MFC类的层次结构 75
Framel 范例程序 75
3.2 MFC程序的初始化过程 78
Frame2范例程序 81
3.3 自制RTTI(动态类型识别) 85
类别型录网与CRuntimeClass 86
DECL ARE_DYNAMIC/IMPLEMENT_DYNAMIC宏 87
Frame3范例程序 93
IsKindOf(类型识别) 101
Frame4范例程序 102
3.4 自制Dynamic Creation(动态生成) 103
DECL ARE_DYNCREATE/IMPLEMENT_DYNCREATE宏 104
Frame5范例程序 110
MFC4.0对动态生成的作法 119
3.5 自制Persistence(永久保存)机制 121
Serialize(数据读写) 121
Frame6范例程序 121
DECL ARE_SERLAL/IMPLEMENT_SERIAL宏 126
没有范例程序 129
3.6 自制Message Mapping( 信息映射) 129
Frame7范例程序 138
3.7 自制Message Routing(信息传递) 148
Frame8范例程序 157
第二篇 欲善工事先利其器—Visual C++v4.0开发工具 172
第4章 Visual C++软件集成开发环境 172
4.1 安装与组成 172
4.2 最重要的四种工具 178
4.3 内务部总管:Visual C++集成开发环境 179
关于Project 180
关于工具设定 181
Source Code Browser 182
Online Help 184
调试工具 186
· VC++调试器 187
· Exception Handling 190
4.4 程序编码生成器:App Wizard 191
东圈西点完成程序框架 192
Scribble Step0 202
4.5 威力强大的资源编辑器 221
Icon编辑器 223
Cursor编辑器 223
Bitmap 编辑器 224
Toolbar(工具栏)编辑器 224
VERSIONINFO资源编辑器 225
String Table(串资源)编辑器 226
Menu(菜单)编辑器 227
Accelerator(加速键)编辑器 228
Dialog(对话框)编辑器 229
5.2 候捷怎么说 232
5.1 什么是Application Framework? 232
第5章 纵观Application Framework 232
第三篇 浅出MFC程序设计 232
5.3 我怎么说 234
5.4 别人怎么说 236
5.5 为什么使用Application Framework 238
5.6 Microsoft Foundation Classes(MFC) 240
5.7 白头宫女话天宝:Visual C++与MFC 242
General Purpose classes 243
5.8 纵观MFC 243
Windows API classes 245
Application framework classes 246
High level abstractions 246
Afx全局函数 247
第6章 MFC程序设计导论—MFC程序的生与死 248
6.1 不二法门:熟记MFC类的层次结构 250
6.2 需要什么函数库(.LIB)? 251
6.3 需要什么头文件(.H)? 252
6.4 简化的MFC程序结构—以HelloMFC为例 253
6.5 Hello程序源代码 255
6.6 MFC程序的来龙去脉 259
我只借用两个类:CWinApp和CFrameWnd 259
CWinApp——取代WinMain的地位 260
CFrameWnd——取代Wndproc的地位 262
引爆器——Application object 263
隐晦不明的WinMain 265
Afx WinInit.——AFX内部初始化操作 268
CWinApp::InitApplication 270
CMyWinApp::InitInstance 271
CFrame Wnd::Create产生主窗口(并先注册窗口类) 272
窗口显示与更新 281
CWinApp::Run——程序生命的源泉 282
把信息与处理函数联结在一起:Message Map机制 284
来龙去脉总汇 286
6.7 Callback函数 287
6.8 Dialog与Control 290
6.9 通用对话框(Common Dialogs) 291
本章回顾 292
7.1 不二法门:熟记MFC 类的层次结构 293
7.2 MFC程序的UI新风貌 294
第7章 简单而完整:MFC程序框架 295
7.3 Document/View支撑你的应用程序 299
7.4 利用Visual C++工具完成Scribble step0 302
7.5 程序框架使用哪些MFC类? 302
7.6 Document Template 的意义 307
7.7 Scrbble的Document/View设计 312
7.8 主窗口的诞生 313
7.9 工具栏和状态栏的诞生 315
7.10 拖曳鼠标(Drag and Drop) 317
7.11 信息映射(Message Map) 318
7.12 标准菜单*File/Edit/View/Window/Help 319
7.13 对话框 321
7.14 改用CEdit View 321
8.1 为什么需要Document-View(形式上) 326
第四篇 深入MFC程序设计 326
第8章 Document-View深入探讨 326
Document 327
View 328
Document Frame(View Frame) 328
Document Template 329
CDocTemplate管理CDocument/CView/CFrame Wnd 329
8.2 Scribble Stepl的Document——数据结构设计 335
MFC Collection Classes的选用 336
· Template-Based Classes 337
· Template-Based Classes的使用方法 338
CScribbleDoc的修改 339
·SCRIBBLEDOC.H(阴影表示与Step0的差异) 340
·SCRIBBLEDOS.CPP(阴影表示与Step0的差异) 342
文件:一连串的线条 346
·CScribbleDoc的成员变量 346
·CScribbleDoc的成员函数 347
·CObList 347
线条与坐标点 349
·CStroke的成员变量 349
·CArray〈CPoint,CPoint〉 349
·CStroke的成员函数 349
8.3 Scribble Step 1的View:文件重绘与编辑 351
CScribble View的修改 352
·SCRIBBL EVIEW.H(阴影表示与Step0的差异) 352
·SCRIBBL EVIEW.CPP(阴影表示与Step0差异) 353
View的重绘动作:GetDocument 和OnDraw 357
·CScribble View的成员变量 357
·CScribble View 的成员函数 357
View与用户的会话(鼠标信息处理实例) 358
Class Wizard的帮助 359
WizardBar的帮助 361
8.4 Serialize:对象的文件读写 362
Serialization以外的文件读写动作 362
台面上的Serialize动作 364
台面下的Serialize写文件奥秘 368
台面下的Serialize读文件奥秘 374
8.5 DYNAMIC/DYNCREATE/SERLAL三组宏定义 381
8.6 Serializable的必要条件 385
8.7 CObject类 387
IsKind Of 387
IsSerializable 388
CObject::Serialize 388
8.8 CArchive 类 389
operator<<和operator>> 390
效率考虑 394
8.9 自定义SERIAL宏给抽象类使用 394
8.10 在CObList中加入CStroke以外的类 395
8.11 Document 与 View交流-为Scribble Step4做准备 399
第9章 信息映射与命令路由 402
9.1 到底要解决什么 402
9.2 信息分类 403
9.4 三个奇怪的宏,一张巨大的网 404
9.3 万流归宗Command Target(CCmd Target) 404
DECLARE_MESSAGE_MAP宏 405
直线上溯(一般Windows信息) 407
拐弯上溯(WM_COMMAND命令信息) 411
9.6 两万五千里长征——信息路由(Message Routing) 415
信息映射网的形成:BEGIN./ON./END.宏 417
9.5 米诺托斯(Minotauros)与西修斯(Theseus) 421
9.7 罗塞达碑石Rosetta stone 427
改变菜单 432
9.8 Scribble Step2:UI对象的变化 432
改变工具栏 435
利用Class Wizard 连接命令项识别码与命令处理函数 437
维护UI对象状态(UPDATE_COMMAND_UI) 440
本章回顾 444
第10章 MFC与对话框 445
10.1 对话框编辑器 446
10.2 利用Class Wizard连接对话框与其专属类 448
PENDLG.H 451
PENDLG.CPP 452
10.3 对话框的信息处理函数 454
MFC中各式各样的MAP 456
10.4 对话框数据交换与检查(DDX DDV) 457
MFC中各式各样的DDx_函数 461
10.5 如何使用对话框 462
本章回顾 464
第11章 View功能的加强与重绘效率的提高 465
11.1 同时修改多个Views-UpdateALL Views和OnUpdate 466
在View中定义一个hint 468
把hint传给OnUpdate 471
利用 hint提高重绘效率 473
11.2 可滚动的窗口:CScrollView 475
11.3 大窗口中的小窗口: Splitter 483
划分窗口的功能 483
划分窗口的程序概念 484
划分窗口的实作 485
本章回顾 488
第12章 打印与预览 489
12.1 概述 489
12.2 打印动作的原理 492
12.3 MFC预设的打印机制 497
12.4 Scribble打印机制的增强 509
打印机的页和文件的页 509
配置GDI绘图工具 510
尺寸与方向:关于映像模式(坐标系统) 511
分页 514
表头与页尾 516
动态计算页码 517
12.5 打印预览(Print Preview) 518
本章回顾 518
第13章 多重文件与多重视图 520
13.1 MDI和SDI 520
13.2 多重视图(Multiple Views) 521
13.3 窗口的动态划分 522
13.4 窗口的静态划分 524
CreateStatic和Create View 526
13.5 窗口的静态三叉划分 527
Graph范例程序 529
静态划分窗口的概念整理 539
13.6 同源子窗口 540
CMDIFrameWnd::On Window New 540
Text范例程序 542
非制式作法的缺点 548
新的Document类 550
13.7 多重文件 550
新的Document Template 552
新的UI系统 553
新文件的文件读写操作 555
第五篇 附录 558
附录A Scribble Step5完整源代码 558
附录B Visual C++范例程序一览 601
附录C OWL程序设计一览 605