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()
.
的任何显式调用之后出现
有没有办法清除文件菜单下的最近文件列表?我尝试用 "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()
.