我希望用户能够编辑我的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的例子可能也有帮助 。
总结以上是内存溢出为你收集整理的更改最近文件的总数全部内容,希望文章能够帮你解决更改最近文件的总数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)