微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改最近文件的总数

我希望用户能够编辑我的MFC应用程序的文件菜单显示的最新文件数量。 我已经使用了两个非常好的参考:

http://www.codeproject.com/KB/menus/changemru.aspx

http://www.microsoft.com/msj/0899/c/c0899.aspx

它涉及删除并重新CRecentFileList存储在CWinApp::m_pRecentFileList的CRecentFileList对象。 不幸的是,我发现replaceCRecentFileList后菜单没有正确更新。 看下面的代码片段:

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

我能做些什么来确保在重新创build对象之后,文件菜单中的内容与m_pRecentFileList同步?

记事本如何在最近打开的文件夹中创build快捷链接

我的CApp来自CWinApp。 在initInstance中,你有这样的一行:

LoadStdProfileSettings(10);

在InitInstance的最后,添加下面的代码

m_pmf->m_pRecentFileList = m_pRecentFileList;

这里m_pmf是我的MainFrame类,我在MFC源文件filelist.cpp中创建了CRecentFileList类型的成员CMainFrame :: m_pRecentFileList。 右边的m_pRecentFileList被保护,CMainFrame不能从InitInstance外部访问它,但是你可以在这里一个功能拷贝。

在CMainFrame :: OnClose的结尾处,通过以下方式强制注册表更新:

m_pRecentFileList->WriteList();

/ /退出时强制注册表更新。 没有强迫,这是行不通的。

我甚至没有重建m_pRecentFileList,MRU机制正确地更新它。 例如:5个MRU项目,第一个移动到另一个目录,不能再被找到。 逐句通过调试器中的代码显示,从列表中删除错误的条目。 出于某种原因,更新的列表不能正确保存,除非我按照上面的解释强制。 我原本以为这个问题可能与权限(64位Win7)有关,但以管理员身份运行应用程序并没有帮助。

一些微软的文档建议你应该从InitInstance调用CWinApp::LoadStdProfileSettings 。 这表明,在初始化过程中,而不是在运行时,这是一次完成的。

你有没有尝试完全实现你提供的两个链接中的第二个? 我的猜测是你需要添加第二部分,而不是调用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的例子可能也有帮助 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐