版权声明:本文为博主原创文章,未经博主允许不得转载。 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) |
---|