最新《C++程序设计案例教程》习题答案文档串行化编程.docx

上传人:b****6 文档编号:3008873 上传时间:2022-11-17 格式:DOCX 页数:12 大小:234.60KB
下载 相关 举报
最新《C++程序设计案例教程》习题答案文档串行化编程.docx_第1页
第1页 / 共12页
最新《C++程序设计案例教程》习题答案文档串行化编程.docx_第2页
第2页 / 共12页
最新《C++程序设计案例教程》习题答案文档串行化编程.docx_第3页
第3页 / 共12页
最新《C++程序设计案例教程》习题答案文档串行化编程.docx_第4页
第4页 / 共12页
最新《C++程序设计案例教程》习题答案文档串行化编程.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

最新《C++程序设计案例教程》习题答案文档串行化编程.docx

《最新《C++程序设计案例教程》习题答案文档串行化编程.docx》由会员分享,可在线阅读,更多相关《最新《C++程序设计案例教程》习题答案文档串行化编程.docx(12页珍藏版)》请在冰豆网上搜索。

最新《C++程序设计案例教程》习题答案文档串行化编程.docx

最新《C++程序设计案例教程》习题答案文档串行化编程

文档串行化编程

将C++对象以字节流的形式保存在二进制文件中称为对象的串行化处理,经过串行化处理的称为持久对象,可以按需要在程序运行中存储和恢复。

例4.1日期对象的串行化

SerialData应用程序串行化日期结构数据,用对话框修改数据,用编辑/修改菜单打开对话框。

1.用AppWizard建立一个普通单文档SerialDate工程

2.添加一个对话框资源:

3.用ClassWizard为三个编辑框添加变量m_Year,m_Month,m_Day

4.用ClassWizard添加类CDateDialog(其基类为CDialog)

5.在头文件SerialDateDoc.h开头添加下面内容:

structDate

{

intm_Year;

intm_Month;

intm_Day;

};

#include"DateDialog.h"

classCSerialDateDoc:

publicCDocument

{

protected:

//createfromserializationonly

CSerialDateDoc();

DECLARE_DYNCREATE(CSerialDateDoc)

//Attributes

public:

Datedate;

}

6.在“编辑”菜单中添加“修改”子菜单项ID_EDIT_MODIFY:

7.将“修改”子菜单项ID_EDIT_MODIFY消息映射到OnEditModify:

8.在SerialDateDoc.cpp中添加代码:

CSerialDateDoc:

:

CSerialDateDoc()

{

date.m_Year=2002;

date.m_Month=6;

date.m_Day=1;

}

voidCSerialDateDoc:

:

Serialize(CArchive&ar)

{

if(ar.IsStoring())

{

ar<

}

else

{

ar>>date.m_Year>>date.m_Month>>date.m_Day;

}

}

voidCSerialDateDoc:

:

OnEditModify()

{

CDateDialogdlg;

dlg.m_Year=date.m_Year;

dlg.m_Month=date.m_Month;

dlg.m_Day=date.m_Day;

if(dlg.DoModal()==IDOK)

{

date.m_Year=dlg.m_Year;

date.m_Month=dlg.m_Month;

date.m_Day=dlg.m_Day;

}

UpdateAllViews(NULL);

SetModifiedFlag(true);//关闭窗口时提示存盘

}

9.修改SerialDateView.cpp中的OnDraw代码

voidCSerialDateView:

:

OnDraw(CDC*pDC)

{

CSerialDateDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

CStringstr;

str.Format("Year:

%d",pDoc->date.m_Year);

pDC->TextOut(20,20,str);

str.Format("Month:

%d",pDoc->date.m_Month);

pDC->TextOut(20,40,str);

str.Format("Day:

%d",pDoc->date.m_Day);

pDC->TextOut(20,60,str);

}

10.编译运行程序

初始界面:

用编辑(E)>修改(M)菜单命令打开对话框修改日期:

视图中显示的日期会作相应变化。

程序退出时提示将修改后的日期数据存盘:

选择“是”,将打开文件对话框:

下次运行程序时可以通过打开文件恢复“无标题”文件中的日期。

例4.2矩形对象的串行化

SerialRect应用程序串行化一个矩形数据,用对话框修改数据,用编辑/修改菜单打开对话框。

1.用AppWizard建立一个普通单文档SerialRect工程,在Step6将CSerialRectView的基类设为CFormView。

AppWizard创建如下初始界面的框架程序:

2.在Form上添加控件,定制界面:

3.添加变量Edit1~Edit4整型(m_x1,m_y1,m_x2,m_y2),取值范围0~300,Edit5为Control-CEdit型(m_Ctrl)。

4.用右键选择控件的Events修改Edit1的黙认EN_CHANGE消息处理OnChangeEdit1为自定义的OnChangeEdit。

其他三个Edit也映射到这个函数。

5.在头文件SerialRectDoc.h中添加变量:

classCSerialRectDoc:

publicCDocument

{

protected:

//createfromserializationonly

CSerialRectDoc();

DECLARE_DYNCREATE(CSerialRectDoc)

//Attributes

public:

intx1,y1,x2,y2;

//Operations

6.在SerialRectDoc.cpp的构造函数中初始化变量:

CSerialRectDoc:

:

CSerialRectDoc()

{

//TODO:

addone-timeconstructioncodehere

x1=y1=x2=y2=0;

}

7.SerialRectView.cpp中添加下面内容:

voidCSerialRectView:

:

OnChangeEdit()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData();

CSerialRectDoc*pDoc=GetDocument();

if(m_x1!

=pDoc->x1)pDoc->x1=m_x1;

if(m_y1!

=pDoc->y1)pDoc->y1=m_y1;

if(m_x2!

=pDoc->x2)pDoc->x2=m_x2;

if(m_y2!

=pDoc->y2)pDoc->y2=m_y2;

Invalidate(true);

}

voidCSerialRectView:

:

OnInitialUpdate()

{

CFormView:

:

OnInitialUpdate();

GetParentFrame()->RecalcLayout();

ResizeParentToFit();

m_x1=GetDocument()->x1;

m_x2=GetDocument()->x2;

m_y1=GetDocument()->y1;

m_y2=GetDocument()->y2;

UpdateData(false);

}

8.在SerialRectDoc.cpp的串行化代码:

voidCSerialRectDoc:

:

Serialize(CArchive&ar)

{

if(ar.IsStoring())

{

//TODO:

addstoringcodehere

ar<

}

else

{

//TODO:

addloadingcodehere

ar>>x1>>y1>>x2>>y2;

}

}

9.为CSerialRectView类添加OnDraw函数

在工作区类视图中右键单击CSerialRectView类,选择AddMemberFunction弹出对话框:

voidCSerialRectView:

:

OnDraw(CDC*pDC)

{

m_Ctrl.UpdateWindow();

pDC=m_Ctrl.GetWindowDC();

pDC->Rectangle(m_x1,m_y1,m_x2,m_y2);

UpdateData(false);

}

10.运行程序,可通过输入坐标值画出矩形,并可将所画的矩形存盘和恢复以前保存的矩形。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1