第八章 document-view 深入**(總結)
1、document
document 在mfc 的cdocument 裡頭被具體化。cdocument 本身並無任何具體資料,它只是提供乙個空殼。當你開發自己的程式,應該從cdocument 衍生出乙個屬於自己的document 類別,並且在類別中宣告一些成員變數,用以承載(容納)資料。然後再(至少)改寫專門負責檔案讀寫動作的serialize 函式。應為他派生至cobject,所有它有cobject 所支援的一切性質,包括執行時期型別資訊(rtti)、動態生成(dynamic creation)、檔案讀寫(serialization)。
2、view
view 負責描述document中的資料,也是在在mfc 的cview 裡頭被具體化。它只是提供乙個空殼。當你開發自己的程式,應該從cview 衍生出乙個屬於自己的view 類別,並且在類別中(至少)改寫專門負責顯示資料ondraw 函式(針對螢幕)或onprint 函式(針對印表機)。由於cview 衍生自cwnd,所以它可以接收一般windows 訊息(如wm_size、wm_paint 等等),又由於它也衍生自ccmdtarget,所以它可以接收來自選單或工具列的wm_command 訊息。
3、frame
框架視窗在document/view之上,主要管理ui。
其中物件的生成過程如下:
mfc 把document/view/frame 視為三位一體。其中用 document template來管理這個"三人組合"。mfc 有乙個cdoctemplate 負責此事。它又有兩個
15、serialize:物件的檔案讀寫serializable 的必要條件:欲讓乙個物件有serialize2
能力,它必須衍生自乙個
serializable
類別。乙個類別意欲成為serializable
,必須有下列五大條件;
1. 從
cobject
衍生下來。如此一來可保有
rtti
、dynamic creation
等機能。
2. 類別的宣告部份必須有
declare_serial
巨集。此巨集需要乙個引數:類別名稱。
3. 類別的實作部份(cpp檔案)必須有implement_serial
巨集。此巨集需要三個引數:一是類別名稱,二是父類別名稱,三是schema no.
。4. 改寫
serialize
虛函式,使它能夠適當地把類別的成員變數寫入檔案中。
5. 為此類別加上乙個
default
構造式(也就是無引數之構造式)。這個條件常為人所忽略,但它是必要的,因為若乙個物件來自檔案,mfc
必須先動態生成 它,而且在沒有任何引數的情況下呼叫其構造式,然後才從檔案中讀出物件資料。
6、dynamic / dyncreate / serial 三「巨集」
declare_dynamic / implement_dynamic //執行時型別識別
declare_dyncreate / implement_dyncreate //動態生成
declare_serial / implement_serial //檔案讀寫
7、cobject 類別的最基本虛函式 ---- iskindof 和isserializable
iskindof()函式,顧名思義,是用來判斷乙個類是不是派生至某個類。
1 bool cobject::iskindof(const cruntimeclass* pclass) constisserializable()函式
在程式在執行時期判斷某類別的schema 號碼是否為0xffff,藉此得知它是否可以serialize。其中schema是mfc配置的,如果乙個類能serialize,那麼就要將它的schema號碼設定為0xffff。
1 bool cobject::isserializable() const8、carchive 類別 ----一塊記憶體緩衝區carchive對運算子進行的過載operator<< 和 operator>>。這對運算子除了實現對基本型別的輸入輸出,還可以實現繼承至cobject的類的輸入輸出,而如果其他類想使用的話,可以對運算子進行過載。2
如何在乙個類中顯示序列化
首先這個類要繼承至cobject
,然後在標頭檔案裡宣告如下
1//在cppdeclare_serial(crectangle);23
virtual
void serialize(carchive& ar);//過載serialize函式
檔案裡實現如下
1 implement_serial(crectangle, cobject, 1);2一章又一章,好多東西看過就忘了,現在記下來,以後複習也方便了。3void crectangle::serialize(carchive&ar)
4
MySql學習 第三部分 (深入淺出MySql)
索引支援索引表 索引 mylsam引擎 innodb引擎 memory引擎 b tree索引 支援支援 支援hash索引 不支援不支援 支援r tree索引 支援不支援 不支援full text索引 支援暫不支援 不支援正規表示式匹配 序列 說明 在字串的開始處進行匹配 在字串的末尾進行匹配 匹配任...
Linux筆記第三部分
最近開學什麼的事比較多,然後今天開始學校安排了培訓,全日制,早上9點到晚上7點,遭不住,不過培訓的機器用的ubantu,頓時覺得自己會玩的 捂臉 linux 13linux使用者基礎 1.使用者 用來限制使用者或程序可以使用的資源 組 用來方便組織管理使用者 2.每個使用者 組 都會有乙個useri...
Linux筆記第三部分
etc passwd中儲存了使用者資訊,etc shadow中儲存了密碼的hash結果。etc passwd中的gid指的是初始使用者組,即使用者登入系統就會擁有這個使用者組的相關許可權 有效使用者組指的是touch乙個新檔案時,生成檔案的所以組,可以通過groups命令檢視,第乙個即為有效使用者組...