MFC 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 filebrowse открывался в том месте, из которого пользователь выбрал файл при последнем использовании.

Как мне это сделать?

Я видел, что есть ключ реестра LastVisitedMRU, но я не смог найти ни одного примера, как правильно использовать его с CFileDialog.DoModal

Большое спасибо!

1 ответ

Решение

Вам не нужно использовать "LastVisitedMRU" для достижения этой цели. Просто используйте методы CWinApp::GetProfileString и CWinApp::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);
    }

Где "ключ реестра" - это значение, которое вы использовали при вызове ключа SetRegistry в методе InitInstance вашего приложения (если его там нет, добавьте его). И "LastPath" - это то, что вы хотите для подраздела реестра.

ПРИМЕЧАНИЕ. Пример кода взят из проекта MBCS.

Другие вопросы по тегам