MFC CFileDialog在用户上次运行时选择的位置打开

时间:2015-07-29 14:40:05

标签: c++ windows mfc registry cfiledialog

我有一个MFC C ++应用程序,它有一个CFileDialog。 我调用它的DoModal函数来打开文件浏览窗口。 我设置了lpstrInitialDir,告诉它第一次打开对话框的位置

CString defaultDir = L"C:\\tmp\\";
CFileDialog d(TRUE);
d.m_ofn.lpstrInitialDir = defaultDir ;

if( d.DoModal ()==IDOK )
    {... app logic after the file was seslected...}

问题是我想让我的程序记住用户选择。下次用户运行我的应用程序时,我希望我的DoModal文件浏览对话框在该位置打开,用户在上次使用时选择该文件。

我该怎么做?

我看到有LastVisitedMRU注册表项,坚果我找不到任何示例如何正确使用它与CFileDialog.DoModal

非常感谢!

1 个答案:

答案 0 :(得分:3)

您无需使用“LastVisitedMRU”来完成此任务。只需使用CWinApp::GetProfileStringCWinApp::WriteProfileString方法读取和写入上次访问的文件的路径。例如......

CString defaultDir = AfxGetApp()->GetProfileString(_T(“<registry key>"), _T("LastPath"));

CFileDialog d(TRUE);
d.m_ofn.lpstrInitialDir = defaultDir;
CString selectedPath = _T("");
BOOL rc = FALSE;

if (d.DoModal() == IDOK)
    {
    selectedPath = d.GetPathName();
    rc = AfxGetApp()->WriteProfileString(_T("<registry key>"), _T("LastPath"), selectedPath);
    }

其中,“注册表项”是您在应用程序的InitInstance方法中的 SetRegistry 键调用中使用的值(如果它不存在,请添加它)。而且,“ LastPath ”是您想要的注册表子密钥。

注意:示例代码来自MBCS项目。