最近在研究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