MFC學習筆記(三)

2021-07-05 03:40:39 字數 2314 閱讀 5483

案例6

: 資料儲存與讀取

修改**:

修改文件類:

class cmydoc : public cdocument

protected: // create from serialization only

cmydoc();

declare_dyncreate(cmydoc)

// attributes

public:

crect m_recta[max];

int   m_count;

修改文件類的onnewdocument

函式:

bool cmydoc::onnewdocument()

if (!cdocument::onnewdocument())

return false;

m_count = 0;

// todo: add reinitialization code here

// (sdi documents will reuse this document)

return true;

void cmydoc::serialize(carchive& ar)

if(ar.isstoring())

ar <

for(int i=0; iar <

else

ar >> m_count;

for(int i=0; iar >> m_recta[i];

修改檢視類的ondraw

函式:

void cmyview::ondraw(cdc* pdc)

cmydoc* pdoc = getdocument();

assert_valid(pdoc);

// todo: add draw code for native data here

for(int i=0; im_count; i++)

pdc->ellipse(pdoc->m_recta[i]);

void cmyview::onlbuttondown(uint nflags, cpoint point) 

// todo: add your message handler code here and/or call default

cmydoc* pdoc = getdocument();  

assert_valid(pdoc);

if(pdoc->m_count 

int r = rand()%50+10;

crect rect(point.x-r, point.y-r, point.x+r, point.y+r);

pdoc->m_recta[pdoc->m_count] = rect;

pdoc->m_count++;

pdoc->setmodifiedflag(); // 設定修改標誌

invalidaterect(rect, false);

cview::onlbuttondown(nflags, point);

知識點:

1.資料是在document

類中處理的,將要儲存的資料在此類的標頭檔案中宣告(

public

),便於讀取時其他類需要呼叫來還原現場;

2.serialize(carchive &ar):其中

carchive 

用序列化的方式來儲存檔案,是

cfile

類的乙個輔助類, 

serialize(carchive &ar)

函式具有

carchive

引數ar

的特性,即讀寫物件資料;

3.carchive物件中包括成員函式

isstoring(),

當該函式返回值為

true

,寫入資料,否是讀取資料,使用輸出運算子(

<<

)將物件資料插入到

carchive

物件中或使用輸入運算子(

>>

)提取資料;

4.cmydoc* pdoc = getdocument():獲取document類的指標,便於呼叫document類中定義的變數(修改資料);

5.assert_valid(*)是乙個巨集,如果該指標為空則彈出對話方塊並終止程式執行;

6.pdoc->setmodifiedflag():括號內為true(已修改,可預設)或者

false

(未修改),設定已修改的標誌,可以確定檔案是否修改,可以達到未修改不用儲存的目的。

MFC學習筆記( )

選單響應順序 view類 文件類 框架類 應用程式類 訊息分類 標準訊息 除wm command之外,所有以wm 開頭的訊息。從cwnd派生的類,都可以接收到這類訊息。命令訊息 來自選單 加速鍵或工具欄按鈕的訊息。這類訊息都以wm command呈現。在mfc中,通過選單項的標識 id 來區分不同的...

MFC學習筆記

1.oncreate函式目前來看只執行了一次 2.對於隱藏的this指標,不是類中的函式成員。當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式 也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的,它作為非靜態成員函式的隱...

MFC 學習筆記

作業 用單文件檢視完成左鍵使圓圈變小,右鍵使圓圈變大,按住ctrl的同時移動滑鼠使圓圈跟著移動。document處理頁面的資料 view呈現和互動。on wm lbuttonup等滑鼠訊息帶著uint nflags 掩碼 引數,記錄滑鼠訊息的同時的附加資訊 比如ctrl或shift鍵 在initin...