MFC:如何清除SDI应用程序的最近文件列表?

MFC: how to clear recent file list of SDI app?

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

BOOL CMRCApp::InitInstance()
{
    ...

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

    return TRUE;
}

编辑

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

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

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

像这样的东西就可以了:

#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 覆盖的末尾(或非常接近)调用此函数(或其代码)(当然在基础 class InitInstance 已被调用) 这样框架实际上已经完成了 MRU 的加载。您还应该确保它在对 LoadStdProfileSettings().

的任何显式调用之后出现