VC 使新的類支援序列化

2021-06-03 12:28:57 字數 2221 閱讀 3296

step1:修改該類,從cobject 繼承

class cgraph:public cobject

step2:實現void cgraph::serialize(carchive& ar)函式

step3:類中實現乙個空的建構函式

step4:在類開始處增加支援序列化的巨集 declare_serial(cgraph)

step5:定義類的版本號 implement_serial(cgraph, cobject, 1 )

具體實現**:

類定義:

class cgraph:public cobject

cgraph::~cgraph()

}void cgraph::draw(cdc *pdc)

pdc->selectobject(poldbrush);

}序列化儲存資料:

cclientdc dc(this);

cbrush *pbrush=cbrush::fromhandle((hbrush)getstockobject(null_brush));

dc.selectobject(pbrush);

switch(m_ndrawtype)

cgraph *pgraph=new cgraph(m_ndrawtype,m_ptorigin,point);

//m_obarray.add(pgraph);

cgraphicdoc *pdoc=getdocument();

pdoc->m_obarray.add(pgraph);

序列化讀取資料:

int ncount;

//ncount=m_obarray.getsize();

ncount=pdoc->m_obarray.getsize();

for(int i=0;idraw(pdc);

((cgraph*)pdoc->m_obarray.getat(i))->draw(pdc);

}string table中idr_mainframe字串資源中各子串的含義

n(1)cdoctemplate::windowtitle,主視窗標題欄上的字串,mdi程式不需要指定,將以idr_mainframe字串為預設值。

n(2)cdoctemplate::docname,預設文件的名稱。如果沒有指定,預設文件的名稱是無標題。

n(3)cdoctemplate::filenewname,文件型別的名稱。如果應用程式支援多種型別的文件,此字串將顯示在"file/new"對話方塊中。如果沒有指定,就不能夠在"file/new"對話方塊處理這種檔案。

n(4)cdoctemplate::filtername,文件型別的描述和乙個適用於此型別的萬用字元過濾器。這個字串將出現在「file/open」對話方塊中的檔案型別列表框中。要和cdoctemplate::filterext一起使用。

n(5)cdoctemplate::filterext,文件的副檔名。如果沒有指定,就不能夠在「file/open」對話方塊中處理這種文件。要和cdoctemplate::filtername一起使用。

n(6)cdoctemplate::regfiletypeid,如果你以::registershellfiletypes向系統的登錄檔註冊檔案型別,此值會出現在hey_classes_root之下成為其子項,並僅供windows內部使用。如果沒有指定,這種檔案型別就無法註冊。

n(7)cdoctemplate::regfiletypename,這也是儲存在登錄檔中的檔案型別名稱。它會顯示於程式中用以訪問登錄檔的對話方塊內。

document/view結構

n在mfc中,文件類負責管理資料,提供儲存和載入資料的功能。視類負責資料的顯示,以及給使用者提供對資料的編輯和修改功能。

nmfc給我們提供document/view結構,將乙個應用程式所需要的「資料處理與顯示」的函式空殼都設計好了,這些函式都是虛函式,我們可以在派生類中重寫這些函式。有關檔案讀寫的操作在cdocument的serialize函式中進行,有關資料和圖形顯示的操作在cview的ondraw函式中進行。我們在其派生類中,只需要去關注serialize和ondraw函式就可以了,其它的細節我們不需要去理會,程式就可以良好地執行。

nmfc給我們提供document/view結構,是希望我們將精力放在資料結構的設計和資料顯示的操作上,而不要把時間和精力花費在物件與物件之間、模組與模組之間的通訊上。

n乙個文件物件可以和多個視類物件相關聯,而乙個視類物件只能和乙個文件物件相關聯。

vc文件序列化

1.carchive在選單開啟儲存時的 cfile file 1.txt cfile modecreate cfile modewrite carchive ar file,carchive store int i 4 char ch a float f 1.3f cstring str ar 以上...

C 類的序列化和反序列化

在很多通訊或者資料儲存的過程中,都需要序列化和反序列化的過程。在c 中,如果想要進行自定義類的序列化,只需要簡單地在定義類的時候新增serializable標籤即可。如 serializable publicclassperson 經常用到的序列化方式有兩種 二進位制和xml,分為由system.r...

vc 上的MFC的物件序列化和反序列化

注意點 1.必須型別序列化宣告 declare serial person 2.必須寫出實現巨集 implement serial person,cobject,versionable schema 2 3.重寫cobject中的serialize函式 void person serialize c...