关于菜单栏中RecentFiles显示为弹出菜单

之前一直为将RecentFiles中的路径全部显示的问题所困扰。

在csdn遇到一个大神推荐了一份代码,得到绝大部分的参考。

贴出出处:http://download.csdn.net/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的菜单项(想着把它删掉,或者替换掉)。

还有各个按钮的响应事件;基本上得到最近打开文件的文件名一般就得到了一切。!!

有建议留下啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值