Мой CApp происходит от CWinApp. В initInstance у вас есть эта строка:
LoadStdProfileSettings(10);
В конце InitInstance добавьте этот код:
m_pmf->m_pRecentFileList = m_pRecentFileList;
Здесь m_pmf - это мой класс MainFrame, и я создал член CMainFrame :: m_pRecentFileList типа CRecentFileList, который находится в исходном файле MFC filelist.cpp. m_pRecentFileList справа защищен, и у CMainFrame нет доступа к нему извне InitInstance, но вы можете сделать функциональную копию здесь.
В конце CMainFrame :: OnClose принудительно обновите реестр:
m_pRecentFileList->WriteList();
// Принудительное обновление реестра при выходе. Это не работает без принуждения.
Мне даже не нужно перестраивать m_pRecentFileList, механизм MRU корректно обновляет его. Пример: 5 элементов MRU, первый перемещен в другой каталог и больше не может быть найден. Выполнение кода в отладчике показывает, что неверная запись удаляется из списка. По какой-то причине обновленный список не сохраняется правильно, если я не заставлю его, как описано выше. Сначала я думал, что проблема может быть связана с привилегиями (64-битная Win7), но запуск приложения с правами администратора не помог.