当一个文档将要被关闭并且已经被标识为“已修改”(调用它的SetModifiedFlag()函数实现)时,默认的MFC行为将显示一个消息框,询问用户是否要保存该文档。
然而有的时候,当要关闭修改过的文档时,要求自动保存它们,而不需要任何的用户交互行为。实现默认MFC行为的函数是CDocument::SaveModified()(DocCore.cpp)当用户选择File->Close菜单命令或关闭某个特殊文档的最后视图时,CDocument::OnFileClose()和CDocument::CanCloseFrame()分别调用CDocument::SaveModifiedFlag()函数。
幸运的是,在CDocument的基类中SaveModified()是作为虚函数定义的,这样可以轻易的改变的它的行为,使用classwizard在自己 的文档类中重载这个函数,并使下面的程序清单所示的代码来实现它:
解释:MFC利用SaveModified()的返回值来知道释放文档对象是否安全。如果文档不需要保存,或者成功的调用了DoFileSave(),那么上面的程序清单代码返回true。DoFileSave()函数才是真正保存文档的函数。
实际上保存文档的过程为DoFileSave()->DoSave()->OnSaveDocument()->Serialize().如果文档从来没有保存过,则DoFileSave()将显示一个Save As对话框,这样用户就可以为该文档选择一个文件名了。