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

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

0

Решение

Вам не нужно использовать «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.

3

Другие решения