当一个文档将要关闭 并且 已经被标记为 修改过(调用它的SetModifiedFlag()函数实现)时,默认的MFC行为将显示一个消息框,询问用户是否要保存该文档。
然而有的时候,当要关闭修改过的文档时,要求自动保存他们,而不需要任何的用户交互行为。实现默认MFC行为的函数是CDocument::SaveModified()。当用户选择File->Close菜单命令,实际调用的是CDocument::OnFileClose()->CDocument::SaveModified().或者关闭某个特殊文档的最后视图时,调用CDocument::CanCloseFrame()->CDocument::SaveModified().
幸运的是,在CDocument基类中SaveModified()是作为虚函数定义的,这样可以轻易的改变它的行为:使用ClassWizard在自己的文档类中重载这个函数,并使用如下显示的代码来实现它。
BOOL CDrawDoc::SaveModified()
{
// Document with "autosave" feature
if( !IsModified() )
return TRUE; // OK to destroy document
// Actually save the document (without prompting the user)
return DoFileSave();
}
MFC利用SaveMOdified()的返回值来知道释放文档对象是否安全。如果文档对象不需要保存,或者成功的调用了DoFileSave()函数,那么上面程序代码返回true。
实际上,DoFileSave()首先调用DoSave(),后者进而调用OnSaveDocument(),OnSaveDocument()来设置这个文档的存档文档,最后调用Serialize().
注意:如果文档从来没有保存过(它仍然是一个未赋标题的文档),则DoFileSave()将显示一个Save as对话框,这样用户就可以为该文档显示一个文件名了。