【问题标题】:MFC: how to clear recent file list of SDI app?MFC:如何清除 SDI 应用程序的最近文件列表?
【发布时间】:2020-08-27 12:17:00
【问题描述】:

有没有办法清除文件菜单下的最近文件列表?我尝试使用“m_pRecentFileList”做一些事情,但到目前为止还没有成功,错误 C2027:使用未定义类型“CRecentFileList”。

BOOL CMRCApp::InitInstance()
{
    ...

    while (m_pRecentFileList->GetSize() > 0)
        m_pRecentFileList->Remove(0);  // no Clear function ??

    return TRUE;
}

编辑

修复编译错误后,while循环变为无限。 Remove(...) 函数似乎没有减少列表。

【问题讨论】:

  • #include <afxadv.h>CRecentFileList Class
  • @dxiv 你打败了我!当您发表评论时,我正在写一个(可能是不必要的)答案。我打算让它更复杂,但 OP 的代码基本上是正确的,所以我输入了很多代码,然后意识到它不是必需的。 (荣誉会规定,如果您发布答案,我应该删除我的答案!)
  • @AdrianMole 不用担心,我 +1 了你的答案,并希望 OP 接受它。

标签: visual-studio visual-c++ mfc


【解决方案1】:

您的代码有正确的想法!但是,要访问m_pRecentFileList 成员的函数,您必须包含afxadv.h 头文件。

编辑:由于 Remove(0) 调用似乎不会改变 GetSize() 返回的值(正如您在 cmets 中所指出的那样),您应该自己跟踪列表的大小。

这样的事情可以解决问题:

#include <afxadv.h> // For the definition of the CRecentFileList class
//...
void CMRCApp::ClearRFL()
{
    int nRFL = m_pRecentFileList->GetSize();
    while (nRFL > 0) m_pRecentFileList->Remove(--nRFL);
    return;
}

另外,请务必在InitInstance 覆盖的末尾(或非常接近)调用此函数(或其代码)(当然在基类InitInstance 已被调用之后),以便框架实际上已经完成了 MRU 的加载。您还应该确保它出现在对 LoadStdProfileSettings() 的任何显式调用之后。

【讨论】:

  • 它以无限循环结束。在 Remove(...) 之后,大小似乎没有减少。检查我的新编辑。感谢您的帮助!
  • @user180574 查看编辑 - 我在我的一个“工作”应用程序中检查了它,它成功了。
猜你喜欢
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多