Open most recent file

--------------------------------------------------------------------------------

This article was contributed by Adam Solesby and extended by Nico van Ravenstein . 

This is very simple, but I had never seen it anywhere else until I had to do it myself. It should save everyone some digging through the documentation. 

To make your program re-open the most recently used file, simply add the following code to your App's InitInstance() between the calls to ParseCommandLine() and ProcessShellCommand(). 

// Parse command line for standard shell commands, DDE, file open

CCommandLineInfo cmdInfo;

ParseCommandLine(cmdInfo);

// ====================== Begin Inserted code ==============================

// If a file is not specified on the command line, open the last file

if ( ! cmdInfo.m_strFileName.GetLength() )

{

CString strFileName;

if (m_pRecentFileList->GetDisplayName(strFileName, 0, "", 0, true))

{

cmdInfo.m_strFileName = strFileName;

cmdInfo.m_nShellCommand =

CCommandLineInfo::FileOpen;

}

}

// ====================== End Inserted code ==============================

// Dispatch commands specified on the command line

if (!ProcessShellCommand(cmdInfo))

return FALSE;

Nico van Ravenstein adds: 

There is a problem with opening the most recent file when the filepath is too long. The directory gets abbreviated by the function AbbreviateName like C:\some path\...\file.txt. Thats nice for a windows title or in the last used list but you can't open a file with it. 

So a better way is this: 

    // Add this to your applications InitInstance function

    //

    // If a file is not specified on the command line, open the last file

    if (!cmdInfo.m_strFileName.GetLength())

    { 

        if (m_pRecentFileList->m_nSize > 0 && 

    !m_pRecentFileList->m_arrNames[0].IsEmpty())

        {

            cmdInfo.m_strFileName = m_pRecentFileList->m_arrNames[0];

            cmdInfo.m_nShellCommand = CCommandLineInfo::FileOpen; 

        }

    }