按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
int m_nType;
CSampleData();
virtual ~CSampleData();
//定义串行化的宏
DECLARE_SERIAL(CSampleData)
// 串行化虚函数
virtual void Serialize(CArchive &ar);
};
2 .CSampleData 类的实现
具体代码如下:
//实现串行化的宏
IMPLEMENT_SERIAL(CSampleData; CObject; 0)
//初始化
CSampleData::CSampleData()
{
m_nType=0;
m_strName=〃〃;
}
CSampleData::~CSampleData()
{
}
// 串行化函数
void CSampleData::Serialize(CArchive &ar)
{
//基类的串行化
CObject::Serialize(ar);
if (ar。IsStoring())
{
//存储数据
arm_strName;
}
}
3 .CSampleDoc 类的声明
具体代码如下:
class CSampleDoc : public CDocument
{
protected: // create from serialization only
CSampleDoc();
DECLARE_DYNCREATE(CSampleDoc)
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSampleDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
//}}AFX_VIRTUAL
// Implementation
public:
CSampleData *m_pData; //这里加入自定义文档数据
virtual ~CSampleDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
·184 ·
…………………………………………………………Page 196……………………………………………………………
第 8 章 文件操作
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CSampleDoc)
// NOTE the ClassWizard will add and remove member functions here。
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
4 .CSampleDoc 类的实现
具体代码如下:
CSampleDoc::CSampleDoc()
{
// TODO: add one…time construction code here
// 初始化数据
m_pData=NULL;
}
CSampleDoc::~CSampleDoc()
{
}
BOOL CSampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
//创建新的文档数据
if (m_pData!=NULL) delete m_pData;
m_pData=new CSampleData;
CString m_str;
return TRUE;
}
·185 ·
…………………………………………………………Page 197……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
/////////////////////////////////////////////////////////////////////////////
// CSampleDoc serialization
// CSampleDoc 的串行化函数
void CSampleDoc::Serialize(CArchive& ar)
{
if (ar。IsStoring())
{
// TODO: add storing code here
//保存 m_pData
arm_pData;
}
}
8。2 文件 CFile 类
在 8。1 节中介绍了如何在文档视图应用程序中加入串行化并进行文件的保存和打开。这
种串行化方法也有诸多局限,不能实现灵活的文件访问。当程序需要自定义文件操作时,就
需要用到 CFile 类。在 MFC 中,CFile 类处理正常的文件 I/O 操作。CFile 类提供通用二进制
文件操作的接口,是所有 MFC 文件操作类的基础,串行化也是最终通过 CFile 类进行文件处
理的。本节将用多个示例介绍 CFile 类的使用方法,并提供 CFile 类中各种函数的使用参考。
实例 8…1:个人信息录入实例。源代码在光盘中“08实例 8…1PersonData”目录下。
PersonData 示例运行界面如图 8…1 所示。该示例是一个基于对话框的 MFC 应用程序。运
行时先提示程序用户选择个人信息数据文件,比如 PersonData 工程目录下的 test。dat 。打开数
据文件后就进入如图 8…1 所示的界面。在这个界面里左侧的列表框可以添加、删除和选择个
人信息的条目 。当选择定某个人名时,在右侧的“个人信息”栏中显示个人信息的具体内容。
如果要修改某个条目的个人信息,则可以直接编辑对话框右侧的具体内容,然后单击“更新”