更改最近文件总数

问题描述 投票:0回答:2

我希望用户能够编辑 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
同步?

c++ windows mfc recent-file-list
2个回答
3
投票

我的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),但以管理员身份运行应用程序并没有帮助。


0
投票

Microsoft 的一些文档 建议您应该从

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
。您尝试过打电话给
CRecentFileList::UpdateMenu
吗?

还有 另一个 CodeProject 示例也可能有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.