【问题标题】:MFC CFileDialog open at location that was selected by user at last runMFC CFileDialog 在用户上次运行时选择的位置打开
【发布时间】:2015-10-20 15:00:37
【问题描述】:

我有一个 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 的示例

非常感谢!

【问题讨论】:

    标签: c++ windows mfc registry cfiledialog


    【解决方案1】:

    您无需使用“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);
        }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2015-12-16
      • 1970-01-01
      • 2020-03-17
      • 2013-11-01
      相关资源
      最近更新 更多