《深入淺出MFC》學習筆記之一 (轉)
《深入淺出MFC》學習筆記之一
作者:XGM RRC.BIT 記於2001-8-10
龔建偉評:這篇學習筆記雖然不是的闡述某個問題,但讀來讓人感到收穫不小,無論你是老鳥還是菜鳥,都會認同的。我希望XGM能夠繼續寫下去,看了《深入淺出MFC》再來看這些筆記,也有溫故知新之感
俟傑先生的《深入淺出MFC》是一本好書,本人是作為有一定C++基礎知識並對VC有一點感性認識的VC初學者來接觸這本書的。應該說這本書並不真正適合像我這樣的初學者,但通讀完該書,還是有一些收穫的,現只整理其中的一部分,作為我的一個學習筆記吧。
1. VC++,為什麼要先安裝Inte
Explorer?(是不是很多老鳥也不知道啊,侯俊傑先生的宗旨就是知其然,還要知其所以然,5555555555 …………)
因為的所有Visual Tools(包括Visual C++、、Visual FoxPro、Visual
J++、Visual InterDev等)都集中由所謂的
管理,而這些工具有一個極大的目標,就是要協助開發Internet應用,所以它們希望能夠和IE有所搭配。
2. SDK:Software Development Kit 原指工具,但現在已經變成了一個專有名詞,凡以
raw 撰寫的通常也稱為SDK程式。也有人把Windows API稱為SDK API。
3.
不同種類之的構造(物件誕生後第一個並且是自動執行的函式)及解構函式(物件行將毀滅,但未毀滅之前一刻,最後執行並且自動執行的函式)執行時機對比如下:
全域性物件區域性物件靜態物件以new產生的物件
建構函式程式一開始就執行(比程式進入點更早)物件誕生時執行
解構函式程式即將結束時執行程式流程離開該物件的存活範圍時執行程式將結束時執行,但比全域性物件的解構函式早一步進行。物件被delete時執行
4. C++並不是純種的面嚮物件語言(SmallTalk 和
才是)。所以,MFC之中得以存在有不屬於任何類的全域性函式,它們統統在函式名稱開頭冠以Afx(x並沒有什麼意思,只是為了湊成一個響亮的名字,Af即Application
)
下面是常見的Afx全域性函式:
AfxBeginThread:開始一個新的執行緒
AfxEndThread:結束一箇舊的執行緒
AfxFormatString1:類似printf一般地將字串格式化
AfxFormatString2:類似printf一般地將字串格式化
AfxMessageBox:類似Windows API 函式 MessageBox
AfxOuputDeString:將字串輸往除錯裝置
AfxGetApp:獲得application (CwinApp派生物件)的指標
AfxGetMainWnd:獲得程式主視窗的指標
AfxGetInstance:獲得程式的instance handle
5. MFC資料型別
下面這些是和程式共同使用的資料型別
BOOL:布林值,取值為TRUE or FALSE
BSTR:32-bit 字元指標
BYTE:8-bit整數,未帶正負號
COLORREF:32-bit數值,代表一個顏色值
D:32-bit整數,未帶正負號
LONG:32-bit整數,帶正負號
LPARAM:32-bit整數,作為視窗函式或callback函式的一個引數
LPCSTR:32-bit指標,指向一個常數字符串
LPSTR:32-bit指標,指向一個字串
LPCTSTR:32-bit指標,指向一個常數字符串,此字串可以移植到Unicode和CS
LPTSTR:32-bit指標,指向一個字串,此字串可以移植到Unicode和DBCS
LPVOID:32-bit指標,指向一個未指定型別的資料
LPRESULT:32-bit數值,作為視窗函式或callback函式的返回值
UINT:在Win16中是一個16-bit 未帶正負號整數,在Win32中是一個32-bit 未帶 正負號整數,
WNDPROC:32-bit指標,指向一個視窗函式
WORD:16-bit 整數 ,未帶正負號
WPARAM:視窗函式或callback函式的一個引數,在Win16中是16-bit,在Win32中是32-bit
下面這些是MFC獨特的資料型別
POSITION:一個數值,代表collection物件(例如陣列或連結串列)中的元素位置,常 用於MFC collection
classes(即資料處理類,如CArray)
LPCRECT:32-bit指標,指向一個不變的RECT結構
6. 奇怪的視窗類名稱Afx:b:14ae:6:3e8f
用Spy++(VC++所附的一個工具)觀察視窗類的名稱時,會發現視窗類名稱變成像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、動態生成等機能
(2)類的宣告部分必須有DECLARE_SERIAL宏,此宏需要一個引數:類名稱
(3)類的實作部分必須有IMPLEMENT_SERIAL宏,此宏需要三個引數:一是類名稱,二是基類名稱,三是 schema no.
(4)改寫Serialize虛擬函式,使它能夠適當地把類的成員變數寫入檔案中
(5)為此類加上一個default建構函式(也就是無引數之建構函式),這個條件常為人所忽略,但它是必要的,因為若一個物件來自檔案,MFC必須先動態生成它,而且在沒有任何引數的情況下其建構函式,然後才從檔案中讀出物件資料。
唉,好東東實在太多了,比如對MFC六大關鍵技術之模擬,三大宏的內部揭密等等(咦,我不是在推銷這本書吧,呵呵)感興趣的話請看看這本書吧,可以找我借哦,所謂“書非借不能讀也”。呵呵………
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990805/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入淺出DPDK學習筆記——前言筆記
- 深度學習深入淺出深度學習
- 深入淺出redux學習Redux
- 深入淺出node讀書筆記筆記
- MySQL學習筆記之一MySql筆記
- 機器學習深入淺出機器學習
- OpenFeign深入學習筆記筆記
- 前端筆記之React(五)Redux深入淺出前端筆記ReactRedux
- 深入淺出學習決策樹(二)
- 深入淺出學習決策樹(一)
- hive學習筆記之一:基本資料型別Hive筆記資料型別
- 數字人粒子系統學習筆記之一筆記
- OpenGL筆記之一 開學筆記
- MFC學習(五)
- 深入淺出eslint——關於我學習eslint的心得EsLint
- 深入淺出FE(十四)深入淺出websocketWeb
- repuest轉發學習筆記一筆記
- 【學習筆記】CSS深入理解之margin筆記CSS
- 【學習筆記】CSS深入理解之overflow筆記CSS
- 【學習筆記】CSS深入理解之relative筆記CSS
- 深入淺出學Java-HashMapJavaHashMap
- 深入淺出Java記憶體模型Java記憶體模型
- 深入淺出記憶體馬(一)記憶體
- Flutter筆記——幀繪製系列之一(原始碼學習)Flutter筆記原始碼
- 《深入淺出node.js》第四章——記憶體控制(筆記)Node.js記憶體筆記
- 《深入淺出深度學習》之“從邏輯學到認知科學”深度學習
- Python——格式轉換的學習筆記Python筆記
- 10g NewFeatures學習筆記(轉)筆記
- 深入淺出 MFC_華中理 工_簡體版電子書pdf下載
- 深入淺出說強制型別轉換型別
- Linux:深入淺出 Linux 共享記憶體Linux記憶體
- 深入淺出Netty記憶體管理 PoolChunkNetty記憶體
- 深入淺出webpack學習(14)–為單頁應用生成HTMLWebHTML
- 淺讀-《深入淺出Nodejs》NodeJS
- golang學習筆記(二)—— 深入golang中的協程Golang筆記
- 【學習筆記】CSS深入理解之vertical-align筆記CSS
- numpy的學習筆記\pandas學習筆記筆記
- 彙編學習筆記之轉移指令筆記
- 依賴倒轉原則--學習筆記筆記