前言
关于简体版的说明
电子书开放自由下载声明
封面
山高月小 水落石出
扉頁
读者来函
第二版序
第一版序
目录
第0章 你一定要知道(导读)
这本书适合谁
你需要什么技术基础
你需要什么软硬件环境
让我们使用同一种語言
本书符号习惯
光盘內容与安裝
范例程序说明
与前版本之差异
如何联络作者
第一篇 勿在浮砂筑高台
第1章 Win32 基本程序观念
Win32 程序开发流程
需要什么函数库(.LIB)
需要什么头文件(.H)
以消息为基础,以事件驱动之
一个具体而微的Win32 程序
程序进入点WinMain
窗口类别之注册与窗口之诞生
消息循环
窗口的生命中枢:窗口函数
消息映射(Message Map)的雏形
对话框的运作
模块定义文件(.DEF)
资源描述档(.RC)
Windows 程序的生与死
空闲时间的处理:OnIdle
Console 程序
Console 程序与DOS 程序的差别
Console程式的編译联结
JBACKUP:Win32 Console 程序设计
MFCCON:MFC Console 程序设计
什么是C Runtime 函数库的多线程版本
进程与执行线程(Process and Thread)
核心对象
一个进程的诞生与死亡
产生子进程
一个执行线程的诞生与死亡
以 _beginthreadex 取代CreateThread
执行线程优先权(Priority)
多线程程序设计实例
第2章 C++ 的重要性质
类别及其成员- 谈封装(encapsulation)
基础类别与衍生类别:谈继承(Inheritance)
this 指针
虚拟函数与多态(Polymorphism)
类别与对象大解剖
Object slicing 与虚拟函数
静态成员(变量与函数)
C++ 程序的生与死:兼谈构造式与析构式
四種不同的对象生存方式
所谓"Unwinding"
执行时期型别信息(RTTI)
动态生成(Dynamic Creation)
异常处理(Exception Handling)
Template
第3章 MFC 六大关键技术之仿真
MFC 类别阶层
Frame1 范例程序
MFC 程序的初始化过程
Frame2 范例程序
RTTI(执行时期型别辨识)
类别型录网与CRuntimeClass
DECLARE_DYNAMIC / IMPLEMENT_DYNAMIC 宏
Frame3 范例程序
IsKindOf(型别辨识)
Frame4 范例程序
Dynamic Creation(动态生成)
DECLARE_DYNCREATE / IMPLEMENT_DYNCREATE 宏
Frame6 范例程序
Persistence(永续生存)机制
Serialize(资料读写)
DECLARE_SERIAL/IMPLEMENT_SERIAL 巨集
没有范例程序
Message Mapping(消息映射)
Frame7 范例程序
Command Routing(命令绕行)
Frame8 范例程序
本章回顾
第二篇 欲善工事先利其器- Visual C++ 5.0 开发工具
Visual C++ 整合开发环境
安装与设定
MFC tech. notes
四个重要的工具
内务府总管:Visual C++ 整合开发环境
关于project
关于工具设定
Source Browser
Online Help
除错工具
VC++ 除错器
Exception Handling
程序代码产生器:AppWizard
东圈西点完成MFC 程序骨干
Scribble Step0
威力强大的资源编辑器
Icon 编辑器
Cursor编辑器
Bitmap编辑器
ToolBar编辑器
VERSIONINFO 资源编辑器
String Table编辑器
Menu 编辑器
Accelerator 编辑器
Dialog 编辑器
Console 程序的项目管理
第三篇 浅出 MFC 程序设计
第5章 总观Application Framework
什么是Application Framework?
侯捷怎么说
我怎么说
别人怎么说
为什么使用Application Framework
Microsoft Foundation Class(MFC)
白头宫女话天宝:Visual C++ 与MFC
纵览MFC
General Purpose classes
Windows API classes
Application framework classes
High level abstractions
Afx 全域函数
MFC 宏(macros)
MFC 数据类型(data types)
第6章 MFC 程序的生死因果
不二法门:熟记MFC 类别的阶层架构
需要什么函数库?(.LIB)
需要什么头文件?(.H)
precompiled headers
简化的MFC 程序架构-以Hello MFC 为例
Hello 程序源代码
CALLBACK 与 afx_msg
MFC 程序的来龙去脉(causal relations)
我只借用两个类别:CWinApp 和CFrameWnd
CWinApp - 取代 WinMain 的地位
CFrameWnd - 取代WndProc 的地位
引爆器 - Application object
隐晦不明的WinMain
AfxWinInit-AFX 内部初始化动作
CWinApp::InitApplication
CMyWinApp::InitInstance
CFrameWnd::Create 产生主窗口(并先注册窗口类别)
奇怪的窗口类别名称Afx:b:14ae:6:3e8f
窗口显示与更新
CWinApp::Run - 程序生命的活水源头
把消息与处理函数串接在一起:Message Map 机制
来龙去脉总整理
Callback 函数
空闲时间(idle time)的处理:OnIdle
Dialog 与Control
通用对话框(Common Dialogs)
本章回顾
第7章 简单而完整:MFC 骨干程序
不二法门:熟记MFC 类别阶层架构
MFC 程序的UI 新风貌
Document/View 支撑你的应用程序
利用 Visual C++ 工具完成 Scribble step0
骨干程序使用哪些MFC 类别?
Document Template 的意义
Scribble 的Document/View 设计
主窗口的诞生
工具栏和状态列的诞生(Toolbar & Status bar)
鼠标拖放(Drag and Drop)
消息映射(Message Map)
标准菜单File / Edit / View / Window / Help
对话框
改用CEditView
第四篇 深入MFC 程序设计
第8章 Document-View 深入探討
为什么需要Document-View(形而上)
Document
View
Document Frame(View Frame)
Document Template
CDocTemplate管理 CDocument / CView / CFrameWnd
Scribble Step1 的Document - 数据结构设计
MFC Collection Classes 的选用
Template-Based Classes
Template-Based Classes 的使用方法
CScribbleDoc 的修改
SCRIBBLEDOC.H
SCRIBBLEDOC.CPP
文件:一连串的线条
CScribbleDoc 的成员变量
CObList
CScribbleDoc 的成员函数
线条与坐标点
CStroke 的成员变量
CArray
CStroke 的成员函数
Scribble Step1 的View:资料重绘与编辑
CScribbleView 的修改
SCRIBBLEVIEW.H
SCRIBBLEVIEW.CPP
View 的重繪動作 - GetDocument 和OnDraw
CScribbleView 的成員變數
CScribbleView 的成員函式
View 與使用者的交談(滑鼠訊息處理實例)
ClassWizard 的輔佐
WizardBar的輔佐
Serialize:对象的文件读写
Serialization 以外的文件读写动作
台面上的Serialize 动作
台面下的Serialize 写档奥秘
台面下的Serialize 读档奥秘
DYNAMIC / DYNCREATE / SERIAL 三“宏”
Serializable 的必要条件
CObject 类别
IsKindOf
IsSerializable
CObject::Serialize
CArchive 类别
operator<< 和 operator>>
效率考量
自定SERIAL 宏给抽象类别使用
在CObList 中加入CStroke 以外的类別
Document 与View 交流- 为Step4 做准备
第9章 消息映射与命令绕行
到底要解决什么
消息分类
万流归宗Command Target(CCmdTarget)
三个奇怪的宏,一张巨大的网
DECLARE_MESSAGE_MAP 宏
消息映射网的形成:BEGIN_/ON_/END_ 宏
米诺托斯(Minotauros)与西修斯(Theseus)
两万五千里长征- 消息的流动
直线上溯(一般Windows 消息)
拐弯上溯(WM_COMMAND 命令消息)
罗塞达碑石:AfxSig_xx 的奥秘
Scribble Step2:UI 对象的变化
改变菜单
改变工具栏
利用ClassWizard 连接命令项识别码与命令处理函数
维护UI 对象状态(UPDATE_COMMAND_UI)
本章回顾
第10章 MFC 与对话框
对话框编辑器
利用ClassWizard 连接对话框与其专属类别
PENDLG.H
PENDLG.CPP
对话框的消息处理函数
MFC 中各式各样的MAP
对话框数据交换与查核(DDX & DDV)
MFC 中各式各样的DDx_ 函数
如何唤起对话框
本章回顾
第11章 View 功能之加強 与 重绘效率之提升
同時修改多个Views:UpdateAllViews 和OnUpdate
在View 中定义一个hint
把hint 传给OnUpdate
利用hint 增加重绘效率
可卷动的窗口:CScrollView
大窗口中的小窗口:Splitter
分裂窗口的功能
分裂窗口的程序概念
分裂窗口之实作
本章回顾
第12章 打印与预览
概观
打印动作的背景原理
MFC 预设的打印机制
Scribble 打印机制的增强
打印机的页和文件的页
配置GDI 绘图工具
尺寸与方向:关于映射模式(坐标系统)
分页
表头(Header)与表尾(Footer)
动态计算页码
打印预览( Print Preview)
本章回顾
第13章 多重文件与多重显示
MDI 和SDI
多重显像(Multiple Views)
窗口的动态分裂
窗口的静态分裂
CreateStatic 和CreateView
窗口的静态三叉分裂
Graph 范例程序
静态分裂窗口之观念整理
同源子窗口
CMDIFrameWnd::OnWindowNew
Text 范例程序
非制式作法的缺点
多重文件
新的 Document 类別
新的 Document Template
新的 UI 系统
新文件的文件读写动作
第14章 MFC 多线程程序设计(Multi-threaded Programming in MFC)
从操作系统层面看执行线程
三个观念:模块、进程、执行线程
执行线程优先权(Priority)
执行线程排程(Scheduling)
Thread Context
从程序设计层面看执行线程
Worker Threads 和 UI Threads
错误观念
正确态度
MFC 多线程程序设计
探索CWinThread
产生一个Worker Thread
产生一个UI Thread
执行线程的结束
执行线程与同步控制
MFC 多线程程序实例
第15章 定制一个AppWizard
到底Wizard 是什么?
Custom AppWizard 的基本操作
剖析 AppWizard Components
Dialog Templates 和 Dialog Classes
Macros
Directives
动手修改Top Studio AppWizard
利用资源编辑器修改IDD_CUSTOM1 对话窗画面
利用ClassWizard 修改IDD_CUSTOM1 对话窗的对应类别CCustom1Dlg
改写OnDismiss 虚拟函数,在其中定义macros
修改 text template
Top Studio AppWizard执行结果
更多的信息
第16章 站上众人的肩膀- 使用 Components 和 ActiveX Controls
什么是 Component Gallery
使用Components
Splash screen
System Info for About Dlg
Tips of the Day
Components 实际运用:ComTest 程序
修改ComTest 程序内容
使用 ActiveX Controls
ActiveX Control 基础观念:Properties 、Methods、Event
ActiveX Controls的五大使用步骤
使用Grid ActiveX Control:oOcxTest程序
第五篇 附錄
附錄A
無責任書評:從搖籃到墳墓 - Windows 的完全學習
無責任書評:MFC四大天王
附錄B Scribble Step5 程式原始碼列表
附錄C Visual C++ 5.0 MFC範例程式總覽
附錄D 以 MFC 重建 Debug Window(DBWIN)