У меня есть приложение 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
Большое спасибо!
Вам не нужно использовать «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.