[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 298
  • Last Modified:

DOC/View show modified and full path

I have an MDI application which is a text editor.  I wish to show the full path to the file being edited in the title bar.  I also want to append an asterisk to the title if the file in the editor is different from the file on disk.

What's the right way to do this?

Thanks in advance,
Mike.

0
MDarling
Asked:
MDarling
  • 5
  • 3
1 Solution
 
ShaunWildeCommented:
use SetTitle for both

if you tell your document it has been modifed using the SetModifiedFlag you van override the implementation of SetModifedFlag thus

void CYourDoc::SetModifiedFlag(BOOL bModified)
{
   if (IsModified() != bModified) {
      CDocument::SetModifiedFlag(bModified);
      CString title = GetTitle();
      int asterisk = title.GetLength()-1;
      if (asterisk >=0 && title.GetAt(asterisk)=='*') {
         if (!bModified)
            title.SetAt(asterisk,0);
      } else if (bModified)
         title += '*';
      SetTitle(title);
   }
}
0
 
MDarlingAuthor Commented:
hi Shaun, thanks for your answer.

what about the first part of the question though?

regards,
Mike.
0
 
ShaunWildeCommented:
use SetTitle(...) to put your file name up in the title bar
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
MDarlingAuthor Commented:
Ok thanks again, but i'm having a little trouble.  When i modify the doc the title changes correctly.

However, when I save the title reverts back to just the filename without the path - the framework is doing this and I can't figure out how.  This is the code for SaveModified

      BOOL bRet=CDocument::SaveModified();
    SetModifiedFlag(FALSE);
    return bRet;

which is being called.

Any ideas?

regards,
Mike.

I have also modified SetModifiedFlag to...

void CMaceEditDoc::SetModifiedFlag( BOOL bModified /*= TRUE */ )
{
    CDocument::SetModifiedFlag(bModified);
    CString title = GetFullTitle();
    int asterisk = title.GetLength()-1;
    if (asterisk >=0 && title.GetAt(asterisk)=='*')
    {
        if (!bModified)
        {
            title.SetAt(asterisk,0);
        }
    }
    else if (bModified)
    {
        title += '*';
    }

    SetTitle(title);
}



CString CMaceEditDoc::GetFullTitle()
{
    CString strTitle=GetPathName();
    if(strTitle.IsEmpty()) strTitle=_T("New Document");
    return strTitle;
}
0
 
MDarlingAuthor Commented:
it's being called from DoSave from in OnFileSave

looking further...
0
 
MDarlingAuthor Commented:
same goes from OnOpenDocument
0
 
ShaunWildeCommented:
I suspect it is being set from SetPathName in the MFC - this is a virtal function and you can override it if you wish - have a look at the MFC implementation in DOCCORE.CPP

CYourDoc::SetPathName(...)
{
CDocument::SetPathName(...); // use correct base class here
SetTitle(...); // set your title back again
}
0
 
MDarlingAuthor Commented:
Yes!

Thanks.

Regards,
Mike.
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now