第0章 你一定要知道(导读) 1
这本书适合谁 1
你需要什么技术基础 2
你需要什么软硬件环境 3
让我们使用同一种语言 3
本书符号习惯 5
本书例程的取得 6
范例程序说明 6
与前版本之差异 9
如何联络作者 10
第一篇 勿在浮砂筑高台 11
第1章 Win32程序基本概念 13
Win32程序开发流程 14
需要什么函数库(.LIB) 14
需要什么头文件(.H) 15
以消息为基础,以事件驱动之(message based,event driven) 15
一个具体而微的Win32程序 16
程序进入点WinMain 22
窗口类之注册与窗口之诞生 23
消息循环 24
窗口的生命中枢:窗口函数 24
消息映射(Message Map)的雏形 25
对话框的运行 27
模块定义文件(.DEF) 28
资源描述档(.RC) 29
Windows程序的生与死 29
空闲时间的处理:OnIdle 30
Console程序 30
Console程序与DOS程序的差别 31
Console程序的编译链接 32
JBACKUP:Win32 Console程序设计 33
MFCCON:MFC Console程序设计 35
行程与线程(Process and Thread) 38
核心对象 38
一个行程的诞生与死亡 39
产生子行程 39
一个线程的诞生与死亡 41
以_beginthreadex取代CreateThread 42
线程优先级(Priority) 44
多线程程序设计实例 45
第2章 C++的重要性质 49
类及其成员——谈封装(encapsulation) 49
基类与派生类:谈继承(Inheritance) 50
this指针 53
虚拟函数与多态(Polymorphism) 53
类与对象大解剖 64
Object slicing与虚拟函数 68
静态成员(变量与函数) 70
C++程序的生与死:兼谈构造函数与解构函数 72
四种不同的对象生存方式(in stack、in heap、global、local static) 74
执行期类型信息(RTTI) 75
动态生成(Dynamic Creation) 77
异常处理(Exception Handling) 78
Template 81
Template Functions 82
Template Classes 83
Templates的编译与链接 85
第3章 MFC六大关键技术之仿真 87
MFC类层次结构 88
Framel范例程序 89
MFC程序的初始化过程 91
Frame2范例程序 93
RTTI(执行期类型识别) 96
类别型录网与CRuntimeClass 97
DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC宏 98
Frame3范例程序 103
IsKindOf(类型识别) 109
Frame4范例程序 110
Dynamic Creation(动态生成) 111
DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE宏 112
Frame6范例程序 117
Persistence(永久保存)机制 124
Serialize(数据读写) 124
DECLARE_SERIAL/IMPLEMENT_SERIAL宏 129
没有范例程序 131
Message Mapping(消息映射) 132
Frame7范例程序 139
Command Routing(命令传递) 147
Frame8范例程序 155
本章回顾 165
第二篇 欲善工事先利其器 167
第4章 Visual C++集成开发环境 169
安装与组成 169
四个重要的工具 179
内务府总管:Visual C++集成开发环境 180
关于project 182
关于工具设定 185
Source Browser 186
Online Help 189
调试工具 191
VC++调试器 192
Exception Handling 195
程序代码产生器:AppWizard 196
东圈西点完成MFC程序骨干 197
威力强大的资源编辑器 224
Icon编辑器 225
Bitmap编辑器 226
Cursor编辑器 226
工具栏(Toolbar)编辑器 227
VERSIONINFO资源编辑器 228
字符串表格(String Table)编辑器 229
菜单(Menu)编辑器 230
加速键(Accelerator)编辑器 231
对话框(Dialog)编辑器 231
Console程序的项目管理 232
第三篇 浅出MFC程序设计 235
什么是Application Framework? 237
第5章 总观Application Framework 237
侯捷怎么说 238
我怎么说 239
别人怎么说 241
为什么使用Application Framework 244
Microsoft Foundation Classes(MFC) 246
白头宫女话天宝:Visual C++与MFC 248
纵览MFC 250
General Purpose classes 250
数据处理类(collection classes) 251
杂项类 251
CObject 251
异常处理类(exception handling classes) 252
Windows API classes 252
Application framework classes 253
High level abstractions 254
Afx全局函数 254
MFC宏(macros) 255
MFC数据类型(data types) 256
第6章 MFC程序的生死因果 259
不二法门:熟记MFC类的层次结构 261
需要什么函数库? 262
需要什么头文件? 263
简化的MFC程序结构——以Hello MFC为例 264
Hello程序程序代码 265
MFC程序的来龙去脉(causal relations) 270
我只借用两个类:CWinApp和CFrameWnd 270
CWinApp——取代WinMain的地位 270
CFrameWnd——取代WndProc的地位 273
引爆器——Application object 274
隐晦不明的WinMain 275
AfxWinInit——AFX内部初始化操作 278
CWinApp∷InitApplication 279
CMyWinApp∷InitInstance 280
CFrameWnd∷Create产生主窗口(并先注册窗口类) 281
奇怪的窗口类名称Afx∶b∶14ae∶6∶3e8f 289
窗口显示与更新 291
CWinApp∷Run——程序生命的活水源头 291
把消息与处理函数连接在一起:Message Map机制 294
来龙去脉总整理 296
Callback函数 297
空闲时间(idle time)的处理:OnIdle 300
Dialog与Control 302
通用对话框(Common Dialogs) 303
本章回顾 304
第7章 简单而完整:MFC骨干程序 307
不二法门:熟记MFC类层次结构 307
MFC程序的UI新风貌 307
Document/View支撑你的应用程序 312
利用Visual C++工具完成Scribble step0 314
骨干程序使用哪些MFC类? 315
Document Template的意义 320
Scribble的Document/View设计 324
主窗口的诞生 325
工具栏和状态栏的诞生(Toolbar Status bar) 327
鼠标拖放(Drag and Drop) 329
消息映射(Message Map) 331
标准菜单File/Edit/View/Window/Help 331
对话框 333
改用CEditView 334
第四篇 深入MFC程序设计 337
为什么需要Document-View(形而上) 339
第8章 Document-View深入探讨 339
Document 340
View 341
Document Frame(View Frame) 342
Document Template 342
CDocTemplate管理CDocument/CView/CFrameWnd 342
Scribble Stepl的Document——数据结构设计 349
MFC Collection Classes的选用 349
CScribbleDoc的修改 352
文件:一连串的线条 359
线条与坐标点 361
Scribble Stepl的View:数据重绘与编辑 363
CScribbleView的修改 364
View的重绘操作:GetDocument和OnDraw 368
ClassWizard的辅佐 370
WizardBar的辅佐 372
Serialize:对象的档案读写 372
Serialization以外的档案读写操作 372
台面上的Serialize操作 374
台面下的Serialize写档奥秘 379
台面下的Serialize读档奥秘 383
DYNAMIC/DYNCREATE/SERIAL三宏 389
Serializable的必要条件 394
CObject类 395
IsKindOf 395
IsSerializable 396
CObject∷Serialize 397
CArchive类 397
operator<<和operator>> 398
自定SERIAL宏给抽象类使用 401
效率考虑 401
在CObList中加入CStroke以外的类 402
Document与View交流——为Step4做准备 406
第9章 消息映射与命令传递 409
到底要解决什么 409
消息分类 410
万流归宗Command Target(CCmdTarget) 411
三个奇怪的宏,一张巨大的网 412
DECLARE_MESSAGE_MAP宏 413
消息映射网的形成:BEGIN.../ON.../END...宏 414
米诺托斯(Minotauros)与西修斯(Theseus) 418
二万五千里长征——消息的传递 422
直线上溯(一般Windows消息) 423
拐弯上溯(WM_COMMAND命令消息) 426
罗塞达碑石:AfxSig_xx的奥秘 432
Scribble Step2:UI对象的变化 436
改变菜单 436
改变工具栏 438
利用ClassWizard连接命令项识别码与命令处理函数 440
维护UI对象状态(UPDATE COMMAND_UI) 443
本章回顾 446
第10章 MFC与对话盒 447
对话框编辑器 448
利用ClassWizard连接对话框与其专用类 451
对话框的消息处理函数 456
对话框数据交换与校验(DDX DDV) 458
如何唤起对话框 462
本章回顾 464
第11章 View功能的加强与重绘效率的提高 467
同时修改多个Views:UpdateAllViews和OnUpdate 468
在View中定义一个hint 470
把hint传给OnUpdate 473
利用hint增加重绘效率 474
可卷动的窗口:CScrollView 476
大窗口中的小窗口:Splitter 484
切分窗口的功能 484
切分窗口的程序概念 484
切分窗口的实现 486
本章回顾 488
概述 491
第12章 打印与预览 491
打印操作的后台原理 494
MFC默认的打印机制 498
Scribble打印机制的增强 509
打印机的页和文件的页 509
配置GDI绘图工具 511
尺寸与方向:关于映射方式(坐标系统) 511
分页 514
页眉与页脚 516
打印预览(Print Preview) 517
动态计算页码 517
本章回顾 518
第13章 多重文件与多重显示 519
MDI和SDI 519
多重显示(Multiple Views) 520
窗口的动态切分 521
窗口的静态切分 523
CreateStatic和CreateView 524
窗口的静态三叉切分 526
Graph范例程序 527
静态切分窗口之观念整理 537
同源子窗口 537
CMDIFrameWnd∷OnWindowNew 538
Text范例程序 539
非标准做法的缺点 544
多重文件 545
新的Document类 545
新的Document Template 547
新的UI系统 548
新文件的档案读写操作 549
第14章 MFC多线程程序设计 553
从操作系统层面看线程 553
三个观念:模块、行程和线程 553
线程优先级(Priority) 555
线程调度(Scheduling) 557
Thread Context 557
从程序设计层面看线程 558
错误观念 559
正确态度 559
Worker Threads和UI Threads 559
MFC多线程程序设计 560
探索CWinThread 560
产生一个Worker Thread 563
产生一个UI Thread 564
线程的结束 565
线程与同步控制 565
MFC多线程程序例程 568
第15章 定制一个AppWizard 571
Custom AppWizard的基本操作 573
到底Wizard是什么? 573
剖析AppWizard Components 577
Dialog Templates和Dialog Classes 578
Macros 579
Directives 580
动手修改Top Studio AppWizard 581
利用资源编辑器修改IDD_CUSTOM1对话框画面 581
利用ClassWizard修改IDD_CUSTOM1对话框的对应类CCustomlDlg 582
改写OnDismiss虚拟函数,在其中定义macros 583
Top Studio AppWizard执行结果 584
修改text template 584
更多的信息 585
第16章 站上众人的肩膀——使用Components ActiveX Controls 587
什么是Component Gallery 587
使用Components 590
Splash screen 590
System Info for About Dlg 592
Tip of the Day 593
Components实际运用:ComTest程序 594
修改ComTest程序内容 608
ActiveX Control基础观念:Properties、Methods、Events 611
使用ActiveX Controls 611
ActiveX Controls的五大使用步骤 613
使用Grid ActiveX Control:OcxTest程序 614
第五篇 附录 627
附录A 无责任书评:从摇篮到坟墓Windows的完全学习 629
无责任书评:MFC四大天王 637
附录B Scribble Step 5完整原始码 651
附录C Visual C++5.0 MFC范例程序一览 683
附录D 以MFC重建DBWIN 689