更改最近文件的总数

时间:2009-05-27 22:12:28

标签: c++ windows mfc recent-file-list

我希望用户能够编辑我的MFC应用程序的“文件”菜单中显示的最近文件数。我使用了两个非常好的参考文献:

它涉及删除并重新创建CRecentFileList中存储的CWinApp::m_pRecentFileList对象。不幸的是,我发现更换CRecentFileList后菜单没有正确更新。请参阅下面的代码段:

void CMyWinApp::SetMRUListSize( int size )
{
   // size guaranteed to be between 1 and 16
   delete m_pRecentFileList ;
   LoadStdProfileSettings( size ) ;
}

在重新创建对象后,我该怎么做才能确保将“文件”菜单中的内容与m_pRecentFileList同步?

2 个答案:

答案 0 :(得分:2)

我的CApp来自CWinApp。在initInstance中,您有以下这一行:

LoadStdProfileSettings(10);

在InitInstance结束时,添加以下代码:

m_pmf->m_pRecentFileList = m_pRecentFileList;

这里m_pmf是我的MainFrame类,我创建了一个类型为CRecentFileList的成员CMainFrame :: m_pRecentFileList,它位于MFC源文件filelist.cpp中。右边的m_pRecentFileList受到保护,CMainFrame无法从InitInstance外部访问它,但你可以在这里制作一个功能副本。

在CMainFrame :: OnClose结束时,强制执行注册表更新:

           m_pRecentFileList->WriteList(); 

//退出时强制注册表更新。如果没有强制,这不起作用。

我甚至不必重建m_pRecentFileList,MRU机制正确更新它。示例:5个MRU项目,第一个被移动到另一个目录,无法再找到。单步执行调试器中的代码会显示错误条目已从列表中删除。由于某种原因,更新列表未正确保存,除非我如上所述强制它。我原本以为问题可能与权限(64位Win7)有关,但是以管理员身份运行应用程序并没有帮助。

答案 1 :(得分:0)

Some of Microsoft's documentation建议您从CWinApp::LoadStdProfileSettings内拨打InitInstance。这告诉我,它是在初始化期间而不是在运行时完成的。

您是否尝试过全面实施您提供的两个链接中的第二个?我的猜测是你需要添加第二部分而不是调用CWinApp::LoadStdProfileSettings

m_pRecentFileList = new CRecentFileList(0, strSection, strEntryFormat, nCount);
if(m_pRecentFileList)
{
    bReturn = TRUE;

    // Reload list of MRU files from registry
    m_pRecentFileList->ReadList();
}

[修改] 显然m_pRecentFileList指向CRecentFileList Class 。您是否尝试过调用CRecentFileList::UpdateMenu

也有another CodeProject example which might help