CMFCMenuBar 的另类动态修改

本文介绍了在Visual Studio 2010中,针对MFC框架的CMFCMenuBar控件进行动态修改的挑战与解决方案。作者否决了在菜单创建前修改和在OnShowPopupMenu消息响应中修改的方法,经过两天源代码研究,找到了一种简洁的方式,只需几行代码即可实现子菜单的增删。文章重点在于分享这一高效的方法。
摘要由CSDN通过智能技术生成

最近在研究mfc的框架, 发现 vs2010 中的框架变化很大

由上至下慢慢研究(先从顶部的菜单栏开始研究, 再到其它停靠窗口)


这菜单栏外观是不错, 问题是不能像 CMenu 那样方便地增删了

网上搜索一下, 发现所有文章写的修改方法只有两个

1. 在菜单栏创建前就先将需要修改的菜单先修改好

2. 在框架的 OnShowPopupMenu 消息响应函数中进行动态修改


先说方法1, 由于我的程序在运行过程中有很多不固定的内容需要添加, 所以这个方式否决了

再说方法2, 每次收到消息再改菜单, 个人感觉系统工作量太大了, 没办法强迫症发作


研究了两天的源代码, 还发现有个简单的方法可以增删子菜单的, 也就几句话就搞定了

CMFCToolBarMenuButton *pOldButton = (CMFCToolBarMenuButton *)m_wndMenuBar.GetMenuItem(0); // 这里是从菜单栏中获取第一个子项按钮

CMenu *pMenu = CMenu::FromHandle(m_wndMenuBar.GetDefaultMenu()); // 从菜单栏中获取主菜单
if (pMenu == NULL) return;
CMenu *pPopMenu = pMenu->GetSubMenu(0); // 从主菜单中获得第一个子菜单(需要与第一行代码的序号匹配)
pPopMenu->AppendMenu(MF_STRING, 1000, _T("Test")); // 在子菜单中添加子项
// 根据修改后的子菜单及原有的子按钮为样本, 创建一个新的按钮
CMFCToolBarMenuButton button(pOldButton->m_nID,
                             pPopMenu->GetSafeHmenu
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值