第一部分
電子書開放自由下載 聲明
封面
山高月小 水落石出
扉頁
讀者來函
第二版序
第一版序
目錄
第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 Library 的多緒版本
行程與執行緒(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 開發工具
第4章 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 type)
第6章 MFC 程式設計導論 - MFC 程式的生死因果
不二法門:熟記 MFC類別的階層架構
需要什麼函式庫(.LIB)
需要什麼含入檔(.H)
precompiled headers
簡化的 MFC 程式架構 - 以Hello MFC 為例
Hello程式原始碼
CALLBACK 與 afx_msg
MFC 程式的來龍去脈
我只借用兩個類別: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 Controls)
本章回顧
第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 交流 - 為 Scribble 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 修改 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、Events
ActiveX Controls 的五大使用步驟
使用 "Grid" ActiveX Control:OcxTest 程式
第五部分
電子書開放自由下載 聲明
第五篇 附錄
附錄A
無責任書評:從搖籃到墳墓 - Windows 的完全學習
無責任書評:MFC四大天王
附錄B Scribble Step5 程式原始碼列表
附錄C Visual C++ 5.0 MFC範例程式總覽
附錄D 以 MFC 重建 Debug Window(DBWIN)