1. 程式人生 > >MFC介面程式設計基礎(20):一個簡單的文件序列化示例(Ex_SDIArchive)

MFC介面程式設計基礎(20):一個簡單的文件序列化示例(Ex_SDIArchive)

上一篇: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)