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.