- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们用 CMFCRibbonBar 替换了 VC++ VS2010 菜单应用程序。在较旧的菜单驱动版本中,我们创建了自己的用户定义类,该类派生自 CRecentFileList。我们覆盖了 UodateMenu 方法以在最近的文件列表中添加和删除文件。现在我们正在使用 CMFCRibbonBar,我们在更新功能区中的最近文件列表时遇到了问题。每次我们打开另一个文件时,MRU 列表都会正确更新,但功能区中的最近文件列表保持不变。如果我们关闭应用程序,然后重新打开它,最近的文件列表会正确更新。任何帮助将不胜感激。谢谢。
最佳答案
由于您使用了来自 CRecentFileList
的自己的派生类,因此有一种可能是对 MFC 的更改影响了它的调用方式 - 特别是如果您更改了 WINVER
在您的项目中定义。
功能区栏只是通过 MFC 框架路由文件/打开和文件/保存的命令,并且在每种情况下它们最终都在 CWinApp::AddToRecentFileList()
,这就是行为。
现在,在早期版本的 MFC(例如 VS2008)中,该函数定义如下:
void CWinApp::AddToRecentFileList(LPCTSTR lpszPathName)
{
ASSERT_VALID(this);
ENSURE_ARG(lpszPathName != NULL);
ASSERT(AfxIsValidString(lpszPathName));
if (m_pRecentFileList != NULL)
m_pRecentFileList->Add(lpszPathName);
}
但是,从(我认为)VS2010 开始 - 当然在 VS2012 中 - 该功能现在看起来像这样:
void CWinApp::AddToRecentFileList(LPCTSTR lpszPathName)
{
ASSERT_VALID(this);
ENSURE_ARG(lpszPathName != NULL);
ASSERT(AfxIsValidString(lpszPathName));
if (m_pRecentFileList != NULL)
{
#if (WINVER >= 0x0601)
m_pRecentFileList->Add(lpszPathName, m_pszAppID);
#else
m_pRecentFileList->Add(lpszPathName);
#endif
}
}
您可以看到 CRecentFileList::Add()
有一个新的重载,这可能会影响派生类中的逻辑。如果您使用调试器进入该新代码,您会看到它正在使用 Windows 7 shell API 调用将最近的文档添加到跳转列表(以及其他内容),无论如何您可能都想这样做。
无论如何,由于您发现重新加载应用程序可以正确显示更新后的列表,因此我认为只有在列表更改后您自己重新加载它才有必要。为此,您可以重写 CWinApp::AddToRecentFileList()
,如下所示:
void CYourApp::AddToRecentFileList(LPCTSTR lpszPathName)
{
CWinApp::AddToRecentFileList(lpszPathName);
m_pRecentFileList->ReadList();
}
看看是否有帮助。
关于c++ - 如何更新 CMFCRibbonBar 中的最近文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927293/
我是一名优秀的程序员,十分优秀!