深入淺出MFC》學習筆記之一- -
Tag:
深入淺出MFC》學習筆記之一
《深入淺出MFC》學習筆記之一
作者:XGM RRC.BIT 記于2001-8-10
龔建偉評:這篇學習筆記雖然不是系統(tǒng)的闡述某個問題,但讀來讓人感到收獲不小,無論你是老鳥還是菜鳥,都會認同的。我希望XGM能夠繼續(xù)寫下去,看了《深入淺出MFC》再來看這些筆記,也有溫故知新之感
俟杰先生的《深入淺出MFC》是一本好書,本人是作為有一定C++基礎知識并對VC有一點感性認識的VC初學者來接觸這本書的。應該說這本書并不真正適合像我這樣的初學者,但通讀完該書,還是有一些收獲的,現(xiàn)只整理其中的一部分,作為我的一個學習筆記吧。
1. 安裝VC++,為什么要先安裝Internet
Explorer?(是不是很多老鳥也不知道啊,侯俊杰先生的宗旨就是知其然,還要知其所以然,5555555555 …………)
因為微軟的所有Visual Tools(包括Visual C++、Visual Basic、Visual FoxPro、Visual
J++、Visual InterDev等)都集中由所謂的Visual Studio
管理,而這些工具有一個極大的目標,就是要協(xié)助開發(fā)Internet應用軟件,所以它們希望能夠和IE有所搭配。
2. SDK:Software Development Kit 原指軟件開發(fā)工具,但現(xiàn)在已經變成了一個專有名詞,凡以Windows
raw API撰寫的程序通常也稱為SDK程序。也有人把Windows API稱為SDK API。
3.
不同種類之對象的構造函數(shù)(對象誕生后第一個執(zhí)行并且是自動執(zhí)行的函數(shù))及析構函數(shù)(對象行將毀滅,但未毀滅之前一刻,最后執(zhí)行并且自動執(zhí)行的函數(shù))執(zhí)行時機對比如下:
全局對象局部對象靜態(tài)對象以new產生的對象
構造函數(shù)程序一開始就執(zhí)行(比程序進入點更早)對象誕生時執(zhí)行
析構函數(shù)程序即將結束時執(zhí)行程序流程離開該對象的存活范圍時執(zhí)行程序將結束時執(zhí)行,但比全局對象的析構函數(shù)早一步進行。對象被delete時執(zhí)行
4. C++并不是純種的面向對象語言(SmallTalk 和
Java才是)。所以,MFC之中得以存在有不屬于任何類的全局函數(shù),它們統(tǒng)統(tǒng)在函數(shù)名稱開頭冠以Afx(x并沒有什么意思,只是為了湊成一個響亮的名字,Af即Application
Framework)
下面是常見的Afx全局函數(shù):
AfxBeginThread:開始一個新的線程
AfxEndThread:結束一個舊的線程
AfxFormatString1:類似printf一般地將字符串格式化
AfxFormatString2:類似printf一般地將字符串格式化
AfxMessageBox:類似Windows API 函數(shù) MessageBox
AfxOuputDebugString:將字符串輸往除錯裝置
AfxGetApp:獲得application object (CwinApp派生對象)的指針
AfxGetMainWnd:獲得程序主窗口的指針
AfxGetInstance:獲得程序的instance handle
5. MFC數(shù)據(jù)類型
下面這些是和Win32程序共同使用的數(shù)據(jù)類型
BOOL:布爾值,取值為TRUE or FALSE
BSTR:32-bit 字符指針
BYTE:8-bit整數(shù),未帶正負號
COLORREF:32-bit數(shù)值,代表一個顏色值
DWORD:32-bit整數(shù),未帶正負號
LONG:32-bit整數(shù),帶正負號
LPARAM:32-bit整數(shù),作為窗口函數(shù)或callback函數(shù)的一個參數(shù)
LPCSTR:32-bit指針,指向一個常數(shù)字符串
LPSTR:32-bit指針,指向一個字符串
LPCTSTR:32-bit指針,指向一個常數(shù)字符串,此字符串可以移植到Unicode和DBCS
LPTSTR:32-bit指針,指向一個字符串,此字符串可以移植到Unicode和DBCS
LPVOID:32-bit指針,指向一個未指定類型的數(shù)據(jù)
LPRESULT:32-bit數(shù)值,作為窗口函數(shù)或callback函數(shù)的返回值
UINT:在Win16中是一個16-bit 未帶正負號整數(shù),在Win32中是一個32-bit 未帶 正負號整數(shù),
WNDPROC:32-bit指針,指向一個窗口函數(shù)
WORD:16-bit 整數(shù) ,未帶正負號
WPARAM:窗口函數(shù)或callback函數(shù)的一個參數(shù),在Win16中是16-bit,在Win32中是32-bit
下面這些是MFC獨特的數(shù)據(jù)類型
POSITION:一個數(shù)值,代表collection對象(例如數(shù)組或鏈表)中的元素位置,常 用于MFC collection
classes(即數(shù)據(jù)處理類,如CArray)
LPCRECT:32-bit指針,指向一個不變的RECT結構
6. 奇怪的窗口類名稱Afx:b:14ae:6:3e8f
用Spy++(VC++所附的一個工具)觀察窗口類的名稱時,會發(fā)現(xiàn)窗口類名稱變成像Afx:b:14ae:6:3e8f這副奇怪的模樣?
原來是Application Framework 把窗口類的名稱轉換為Afx:: x :y :z :w的類型,成為獨一無二的窗口類型名稱:
x:窗口風格的hex值
y:窗口鼠標光標的hex值
z:窗口后臺顏色的hex值
w:窗口圖標的hex值
7. Serializable 的必要條件
讓一個對象有Serializable能力,它必須派生自一個Serializable類,一個類要成為Serializable,必須有下列五大條件:
(1)從Cobject派生下來,如此一來,可保有RTTI、動態(tài)生成等機能
(2)類的聲明部分必須有DECLARE_SERIAL宏,此宏需要一個參數(shù):類名稱
(3)類的實作部分必須有IMPLEMENT_SERIAL宏,此宏需要三個參數(shù):一是類名稱,二是基類名稱,三是 schema no.
(4)改寫Serialize虛擬函數(shù),使它能夠適當?shù)匕杨惖某蓡T變量寫入檔案中
(5)為此類加上一個default構造函數(shù)(也就是無參數(shù)之構造函數(shù)),這個條件常為人所忽略,但它是必要的,因為若一個對象來自檔案,MFC必須先動態(tài)生成它,而且在沒有任何參數(shù)的情況下調用其構造函數(shù),然后才從檔案中讀出對象數(shù)據(jù)。
唉,好東東實在太多了,比如對MFC六大關鍵技術之仿真,三大宏的內部揭密等等(咦,我不是在推銷這本書吧,呵呵)感興趣的話請看看這本書吧,可以找我借哦,所謂“書非借不能讀也”。呵呵………