Visual C++ 5开发使用手册第一个存储程序。
时间:2010-10-22 来源:thanklife
|
Visual C++ 5开发使用手册 机械工业出版社 special edition using visual C++ 5 kate Gregory
在线英文版:http://www.lietus.com/books/Windows/SpecialEdition_using_VisualC++5
第八章 持久性和文件I/0
例子程序制作。
1建立单文档项目File。 到document类添加成员变量:
// Attributes
public:
CString m_message;
2对文档数据进行初始化:
BOOL CFileDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
m_message = "Default Message";
return TRUE;
}
3、在视图窗口显示,就是在view类的OnDraw()函数中添加:
pDC->TextOut(20, 20, pDoc->m_message);
4、添加编辑文档内容的对话框ChangeDlg,添加编辑框,并添加关联成员m_message;
5、进入菜单资源框,建立一个菜单ID_CHANGEMESSAGE,然后在view类里面关联命令:
void CFileView::OnChangemessage()
{
// TODO: Add your command handler code here
CChangeDlg dlg(this);
CFileDoc* pDoc = GetDocument();
dlg.m_message = pDoc->m_message;
int result = dlg.DoModal();
if (result == IDOK)
{
pDoc->m_message = dlg.m_message;
pDoc->SetModifiedFlag();
Invalidate();
}
}
6、在document类里面的串行化函数里面添加保存和加载文档。
void CFileDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
ar << m_message;
}
else
{
// TODO: add loading code here
ar >> m_message;
}
}
<< 和>>进行存储和取出的操作符,他们是为后面这些简单数据类型定义的:
BYTE, WORD, int, LONG, DWORD, float, double.
创建持久类来进行存储,具有较好的面向对象特征:
|
创建一个能串行化其成员变量的类的基本步骤如下:
1, 由CObject派生此类。
2, 在类定义部分放置:DECLARE_SERIAL(CMessage)
3, 在类实现部分放置:IMPLEMENT_SERIAL(CMessage, CObject, 0)
4, 重载类中的Serialize()
class CMessage :public CObject
{
DECLARE_SERIAL(CMessage)
CMessage(){};
protected:
CString m_message1;
CString m_message2;
CString m_message3;
public:
void SetMessage(UINT msgNum, CString msg);
CString GetMessage(UINT msgNum);
void Serialize(CArchive& ar);
};
IMPLEMENT_SERIAL(CMessage, CObject, 0)
void CMessage::SetMessage( UINT msgNum, CString msg )
{
switch(msgNum)
{
case 1:
m_message1 = msg;
break;
case 2:
m_message2 = msg;
break;
case 3:
m_message3 = msg;
break;
}
}
CString CMessage::GetMessage( UINT msgNum )
{
switch(msgNum)
{
case 1:
return m_message1;
case 2:
return m_message2;
case 3:
return m_message3;
default:
return "";
}
}
void CMessage::Serialize( CArchive& ar )
{
CObject::Serialize(ar);
if(ar.IsStoring())
{
ar << m_message1 <<m_message2 << m_message3;
}else
{
ar >> m_message1 >>m_message2 >> m_message3;
}
}