之前一直为将RecentFiles中的路径全部显示的问题所困扰。
在csdn遇到一个大神推荐了一份代码,得到绝大部分的参考。
贴出出处:http://download.youkuaiyun.com/download/schlafenhamster/5704807
因为我的程序用的不是CMenu的菜单,而是CMFCMenuBar对象的菜单项
整理下处理思路:
1、在Capp.cpp中定义一个全局变量 CRecentFileList *g_pRecentFileList,在CMRUFApp::InitInstance()中的LoadStdProfileSettings();在这个函数中可以定义最近浏览文件的最大显示数目,默认为4。紧随其后就是用我们定义的全局变量去承接 g_pRecentFileList=m_pRecentFileList。我们可以通过这个变量可以得到包含最近打开文件字符串的数组。
2、在菜单栏中添加一个菜单项,属性Popup设置为true,为其添加一个子菜单项,id为ID_FILE_MRU_1。
3、在MainFrm.cpp中定义最大最近打开文件按钮的ID号,即#define ID_FILE_MRU_4 ID_FILE_MRU_1+4。为CMainFrame类添加一个OnShowPopupMenu()处理消息,以及最近打开文件的按钮处理消息ON_COMMAND_RANGE(ID_FILE_MRU_1,ID_FILE_MRU_4, OnFileMru)
(这里要说明的是,因为在OnInitMenuPopup()中一直处理出问题,就选择在OnShowPopupMenu里面处理)
4、下面就是在OnShowPopupMenu里处理了
if( pMenuPopup && pMenuPopup->GetMenuBar()->CommandToIndex(ID_FILE_MRU_1) > =0 ) //这里面的判断pMenuPopup 为真很关键,不然程序会挂
{
int all=g_pRecentFileList->GetSize();//default = 4
int nID;
CString str;
for(int j=0; j < all; ++j)
{
str=g_pRecentFileList->m_arrNames[j];
pMenuPopup->InsertItem(CMFCToolBarMenuButton(ID_FILE_MRU_1+j,NULL,-1,str),j);
}
}
这样就能达到显示的效果了,但还是有很多需要改进的地方。好比弹出菜单项中有个原先设置的ID为ID_FILE_MRU_1的菜单项(想着把它删掉,或者替换掉)。
还有各个按钮的响应事件;基本上得到最近打开文件的文件名一般就得到了一切。!!
有建议留下啊。