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

标签 c++ windows mfc registry cfiledialog

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

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 一起正确使用

非常感谢!

最佳答案

您不需要使用“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 项目。

关于c++ - MFC CFileDialog 在用户上次运行时选择的位置打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31703692/

相关文章:

c++ - cplexmiqp MATLAB 的 CPLEX 等效 C++

c++ - Gtkmm scroll_to() 目的

c++ - cpp 文件中是否需要 __declspec(dllexport)

windows - 启用 ctreecntrl 树项中的复选框

c++ - 如何正确刷新ribbon的MFC默认最近文档列表?

c++ - 在 C++ 中,如何在以下示例中成功地将类链接在一起?

windows - 以编程方式终止并重新启动 explorer.exe 的最干净的方法是什么?

c++ - 如何在不使用 ((CMainFrame*) AfxGetMainWnd ())->... 的情况下访问 Mainfrm 成员变量状态?

javascript -::悬停选项适用于 IE,但不适用于 CDHtmlDialog

c++ - 以纳秒为单位测量精确时间 C++