我希望用户能够编辑MFC应用程序的"file"菜单中显示的最新文件数。我使用了两个很好的引用:
它涉及删除并重新创建存储在
CRecentFileList
中的CWinApp::m_pRecentFileList
对象。不幸的是,我发现替换CRecentFileList
后菜单没有正确更新。请参见下面的代码段:void CMyWinApp::SetMRUListSize( int size )
{
// size guaranteed to be between 1 and 16
delete m_pRecentFileList ;
LoadStdProfileSettings( size ) ;
}
重新创建对象后,我该怎么做才能确保"file"菜单中绘制的内容与
m_pRecentFileList
同步? 最佳答案
我的CApp源自CWinApp。在initInstance中,您具有以下这一行:
LoadStdProfileSettings(10);
在InitInstance的末尾,添加以下代码:
m_pmf->m_pRecentFileList = m_pRecentFileList;
这里m_pmf是我的MainFrame类,我创建了一个CRecentFileList类型的成员CMainFrame::m_pRecentFileList,它位于MFC源文件filelist.cpp中。右边的m_pRecentFileList protected ,CMainFrame无法从InitInstance外部访问它,但是您可以在此处进行功能复制。
在CMainFrame::OnClose的末尾,通过以下方式强制更新注册表:
m_pRecentFileList->WriteList();
//强制退出时更新注册表。如果没有强制,这是行不通的。
我什至不必重建m_pRecentFileList,MRU机制可以正确更新它。示例:5个MRU项,第一个被移动到另一个目录,无法再找到。单步执行调试器中的代码显示该错误条目已从列表中删除。由于某些原因,除非我按照上面的说明强制执行,否则无法正确保存更新后的列表。我本来以为问题可能与特权(64位Win7)有关,但以管理员身份运行该应用程序无济于事。