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;
}
}
Updated 4 April 1998