MFC介面程式設計基礎(20):一個簡單的文件序列化示例(Ex_SDIArchive)
阿新 • • 發佈:2019-01-12
上一篇:MFC介面程式設計基礎(19):文件檢視結構應用程式例子(Editor) | 下一篇:MFC介面程式設計基礎(21):一個簡單的CArchive類用法的示例(Ex_Archive) |
---|
- 第一步 用MFC應用程式嚮導建立一個預設的單文件應用程式Ex_SDIArchive。
- 第二步 開啟StringTable資源,將文件模板字串資源IDR_MAINFRAME,該字串資源實際上是由 \n字元分隔的7個字串,前兩個 \n之間沒有任何內容,所以文件才沒有標題,我們可以在它們之間新增一個標題。如下圖所示。
- 第三步 為CEx_SDIArchiveDoc類新增下列成員變數:
class CEx_SDIArchiveDoc : public CDocument
{
……
public:
CPoint points[100];
int m_index; // 表示陣列中點的數目;
……
}
- 第四步 在CExSDIArchiveDoc::OnNewDocument函式中新增下列程式碼:m_index=0;
BOOL CEx_SDIArchiveDoc::OnNewDocument() { …… m_index=0; return TRUE; }
- 第五步 用MFC ClassWizard為類CEx_SDIArchiveView新增WM_LBUTTONDOWN的訊息處理函式OnLButtonDown(),如圖17所示。然後開啟該函式進行編輯。修改後的OnLButtonDown函式如下:
void CEx_SDIArchiveView::OnLButtonDown(UINT nFlags, CPoint point) { CEx_SDIArchiveDoc* pDoc=GetDocument(); if(pDoc->m_index==100) return; // 接受滑鼠輸入,將其新增到文件類 pDoc->points[pDoc->m_index]=point; pDoc->m_index++; pDoc->SetModifiedFlag(); // 設定文件修改標誌 Invalidate(); // 更新客戶區域 CView::OnLButtonDown(nFlags, point); }
- 第六步 修改CEx_SDIArchiveView CEditorView類的OnDraw()函式,編輯後該函式的程式碼如下:
void CEx_SDIArchiveView::OnDraw(CDC* pDC)
{
……
int index;
index=pDoc->m_index;
for (int i=1;i<=index;i++)
{
pDC->Ellipse(pDoc->points[i].x-2,pDoc->points[i].y-2,pDoc->points[i].x+2,pDoc->points[i].y+2);
}
}
- 第七步 用MFC ClassWizard為類CEx_SDIArchiveDoc新增Serialize虛擬函式,實現文件類中成員新增下列程式碼:
void CEx_SDIArchiveDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar<<m_index;
for (int i=0;i<=m_index;i++)
{
ar<<points[i].x<<points[i].y;
}
}
else
{
ar>>m_index;
for (int i=0;i<=m_index;i++)
{
ar>>points[i].x>>points[i].y;
}
}
}
- 第八步 編譯執行並測試。結果如下圖所示。
程式執行後,選擇【檔案】→【另存為】命令,指定一個文件名ab,然後選擇【檔案】→【新建】命令,再開啟文件,結果就會彈出對話方塊,顯示該文件的內容。
上一篇:MFC介面程式設計基礎(19):文件檢視結構應用程式例子(Editor) | 下一篇:MFC介面程式設計基礎(21):一個簡單的CArchive類用法的示例(Ex_Archive) |
---|