void CBaseDocViewDemo4Doc::SetModifiedFlag(BOOL bModified)
{
    CString  strTitle=GetTitle();    CString  strDirtyFlag=" 文档已被修改,注意保存!"           //注意引号内前面的空格
    if(!IsModified() && bModified)                              //如果被修改了
    {
        SetTitle(strTitle + strDirtyFlag);                      //修改标题栏
    }
    else if(IsModified() && !bModified)                         //已经保存了文档
    {
        int nTitleLength=strTitle.GetLength();
        int nDirtyLength=strDirtyFlag.GetLength();
        SetTitle(strTitle.Left(nTitleLength - nDirtyLength));   //恢复原来的标题
    }
    UpdateFrameCounts();
    CDocument::SetModifiedFlag(bModified);
}

解决方案 »

  1.   

    IsModified() 这函数究竟是干什么用的,
    为什么在这段代码里每次都跟bModified的取值相反?
    MSDN上写,文档如果被修改IsModified()就返回TRUE,
    可是if后面明明是 if(!IsModified() && bModified) 明明已经取非了
    可是这段代码偏偏运行得一切正常,真是没法理解…………
    去掉IsModified()等东西以后文档一修改就退出,
    真是 囧…………………………
      

  2.   

    每次文档被修改的时候都调用,
    SetModified(TRUE);
    程序运行一切正常,
    这个单文档程序就是在文档内容改变时提醒用户文档已经修改,
    IsModified()这函数究竟干什么用的,
    真是无法理解………………
      

  3.   


    if(!IsModified() )
    应该是//如果没有被修改了 的意思了。
      

  4.   

    MSDN文档里的说明:
    BOOL IsModified();Return ValueNonzero if the document has been modified since it was last saved; otherwise 0.如果文档被保存后又被改变则返回非零的值,否则返回0在你发出来的这段代码里,IsModified()取得的是当前的状态,bModified是将要设置的状态(目标状态)
    从逻辑上来说,当前状态跟目标如果是一样的话就是什么都不用做,
    所以用一个非,刚好可以让程序在IsModified()跟bModified相同时不进行任何处理(也就是不进入if也不进入else)那个判断拆开来看就明白了
    void CBaseDocViewDemo4Doc::SetModifiedFlag(BOOL bModified) 

        CString  strTitle=GetTitle();     CString  strDirtyFlag=" 文档已被修改,注意保存!"          //注意引号内前面的空格 
        if(IsModified()!= bModified)                              
        {  
            if(bModified)                              //如果被修改了 
            { 
                SetTitle(strTitle + strDirtyFlag);                      //修改标题栏 
            } 
            else                        //已经保存了文档 
            { 
                int nTitleLength=strTitle.GetLength(); 
                int nDirtyLength=strDirtyFlag.GetLength(); 
                SetTitle(strTitle.Left(nTitleLength - nDirtyLength));  //恢复原来的标题 
            } 
        } 
        UpdateFrameCounts(); 
        CDocument::SetModifiedFlag(bModified); 
    }