函数用于文档对象的初始化,Seralize()函数用于实现序列化。虽然定
义了这两个函数,但只是提供了一个框架,具体的函数内容需要用户自己加入。
处理文档序列化的OnSerialize()函数的默认代码如下:
void CHelloMFCDoc::Serialize(CArchive& ar)
{
//存储
if (ar.IsStoring())
{
// TODO: add storing code here
}
//读取
else
{
// TODO: add loading code here
}
}
技巧:当文档被修改时,在其标题上加上“*”作标志。
文档类还可处理由菜单项、工具栏按钮或快捷键生成的某些命令。默认情况下,
CDoccomnt 使用序列化方式处理“File|Save”和“File|Save as”菜单命令,文档可以有消息
映shè,但与视图不同,文档无法处理标准Windows 消息,而只能处理WM_COMMAND 命令
消息或命令。
实例2-3:技巧演示程序。源代码在光盘中“\02\实例2-3\EditApp”目录下。
如重载CEditAppDoc 类的SetModifiedFlag 函数,代码如下:
void CEditAppDoc::SetModifiedFlag(BOOL bModified /* = TRUE */)
{
CString strTitle = GetTitle();
CString strDirtyFlag = " *"; // note space before the ’*’
枫叶文学网www.fywxw.com
第2 章 应用程序基本框架
·25·
// so we don’t break Save As dialog
if (!IsModified() && bModified)
{
SetTitle(strTitle + strDirtyFlag);
}
else if ( IsModified() && !bModified )
{
int nTitleLength = strTitle.GetLength();
int nDirtyLength = strDirtyFlag.GetLength();
SetTitle( strTitle.Left(nTitleLength - nDirtyLength) );
}
UpdateFrcomCounts();
CDoccomnt::SetModifiedFlag(bModified);
}
同时映shèCEditAppView 的EN_CHANGE 消息如下:
void CEditAppView::OnChange()
{
// TODO: If this is a RICHEDIT contro