文档保存和修改: 如何在试图的标题中显示一个“修改过”的指示符 星号*,与某个“修改过”的文档关联?

这个问题的一般解决方案可以像“3.20如何定制视图的标题?”中的说明一样来实现。如果所要希望的只是显示一个简单的“修改过”指示符。例如:某个“有改动的”文档标题中的一个‘*’,那么只需要简单的重载CDocument::SetModifiedFlag()函数,无论什么时候改变文档对象时,都可以调用该函数。

      我们可以安全的重载SetModified(),因为在CDocument类中该函数是作为虚函数来声明的。尽管Visual C++的在线帮助忘了提到该事实。

      下面的程序清单说明了SetModified()的实现,当文档成为“有改动的”时候,它修改该文档的标题,并附加上一个‘*’,当文档再次转变为“已保存”时--通常是因为用户保存了改文档--移去这个‘*’。

      还要注意在‘*’前面的额外空格是必须的,它防止MFC把星号作为文档名的一部分来处理。最后要注意的是,必须在没有任何ClassWizard帮助下手工重载SetModified()。

  1. virtual void SetModifiedFlag(BOOL bModified);  
  2. void CDrawDoc::SetModifiedFlag(BOOL bModified)  
  3. {  
  4.     CString strTitle=GetTitle();  
  5.     //注意:"修改过"标识前的空格   
  6.     //它防止"Save As"对话框中的文档名出现问题   
  7.     CString strIndicator=" *";  
  8.     if(!IsModified() && bModified)  
  9.     {  
  10.         //1、文档以前是"没有修改过的",现在是"已改动过的"   
  11.         SetTitle(strTitle + strIndicator);  
  12.     }  
  13.     else if( IsModified() && !bModified)  
  14.     {  
  15.         //2、文档以前是"修改过的",现在是"未修改的"   
  16.         SetTitle( strTitle.Left(strTitle.GetLength()-strIndicator.GetLength() ) );  
  17.     }  
  18.     //强制更新框架窗口的标题(这将使框架窗口显示新的标题)   
  19.     UpdateFrameCounts();  
  20.     //最后,调用标准函数   
  21.     CDocument::SetModifiedFlag(bModified);  
  22. }  
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值