MFC深入淺出讀書筆記第三部分1

2022-01-29 01:38:53 字數 2788 閱讀 8675

第八章 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 負責此事。它又有兩個

1

2

5、serialize:物件的檔案讀寫serializable 的必要條件:欲讓乙個物件有serialize 

能力,它必須衍生自乙個

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) const
isserializable()函式

在程式在執行時期判斷某類別的schema 號碼是否為0xffff,藉此得知它是否可以serialize。其中schema是mfc配置的,如果乙個類能serialize,那麼就要將它的schema號碼設定為0xffff。

1 bool cobject::isserializable() const

2

8、carchive 類別 ----一塊記憶體緩衝區carchive對運算子進行的過載operator<<  和  operator>>。這對運算子除了實現對基本型別的輸入輸出,還可以實現繼承至cobject的類的輸入輸出,而如果其他類想使用的話,可以對運算子進行過載。

如何在乙個類中顯示序列化

首先這個類要繼承至cobject

,然後在標頭檔案裡宣告如下

1

declare_serial(crectangle);23

virtual

void serialize(carchive& ar);//過載serialize函式

//在cpp

檔案裡實現如下

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命令檢視,第乙個即為有效使用者組...