MFC界面编程基础(20):一个简单的文档序列化示例(Ex_SDIArchive)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17017545/article/details/85232604
上一篇: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)

猜你喜欢

转载自blog.csdn.net/qq_17017545/article/details/85232604