VC下面ModifyMenu 的使用问题

这是一个账号007 2014-07-17 04:49:39
首先,说明问题。
如下图,
类似这样的多级菜单,想要动态的区改变这些菜单子项的显示

现在查到了ModifyMenu 这个方法。
先针对第一级的菜单,代码如下。

CMenu *pMenu=GetMenu();
CMenu *pTestMenu=pMenu->GetSubMenu(0);
pTestMenu->ModifyMenu(0, MF_BYPOSITION, NULL,_T("测试第一级成功"));
pTestMenu->ModifyMenu(1, MF_BYPOSITION, NULL,_T("不懂怎么做"));

利用位置,得到的结果是正确的。
但是改变第二层的时候,就出了问题
我的代码如下
	CMenu *pMenu=GetMenu();

CMenu *pTestMenu=pMenu->GetSubMenu(0);

#if 1
//按id
//获取第二级菜单
CMenu *pSecondMenu=pTestMenu->GetSubMenu(1);
if (pSecondMenu == NULL)
{
AfxMessageBox(_T("二级菜单指针为空"));
}
pSecondMenu->ModifyMenu(0, MF_BYPOSITION, NULL,_T("设置了吗"));
pSecondMenu->ModifyMenu(1, MF_BYPOSITION, NULL,_T("改变了吗"));
#else
//按pos
pTestMenu->ModifyMenu(NULL, MF_BYCOMMAND, ID_SET,_T("设置了吗"));
pTestMenu->ModifyMenu(NULL, MF_BYCOMMAND, ID_CHANGE,_T("改变了吗"));
#endif


跑到ModifyMenu这句的时候直接崩了。个人经验不足,找不到问题在哪里。

恳求帮忙看看啊。。。。
...全文
349 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2014-07-18
  • 打赏
  • 举报
回复
这是baidu百科 http://baike.baidu.com/view/1080164.htm?fr=aladdin#1 里面有这样的描述 一旦菜单被修改,无论它是否在显示窗口里,应用程序必须调用函数DrawMenuBar。要修改已存在菜单项的属性,使用函数CheckMenultem和EnableMenultem更快。 你的问题可能和这个有关 我还记得以前做菜单要加check标识 需要重载菜单更新信息才能实现 不过那个是对话框 你这个应该是但文档不会存在那个问题 但如果确认菜单项已经被修改了但没有显示出来 应该考虑是不是没有及时更新
  • 打赏
  • 举报
回复
引用 3 楼 xianglitian 的回复:
哪里报错看哪里啊 程序都是调出来的[/quote] 整出来了。。原来是别人给这个函数的讲习,被我理解错了。。 ModifyMenu()的四个参数,第一个是填ID或者pos。第二个是类型。。第三个,被我当成了第一个参数(我百度看到别人说的。。) 第四个是字符串。。 第三个参数,现在被我都填为NULL,实际是什么意思呢?
  • 打赏
  • 举报
回复
引用 1 楼 xianglitian 的回复:
先调试看看菜单的句柄是不是空的
昨天调试过了。一直都有非空。 今天来加了一个return; if (pSecondMenu == NULL) { AfxMessageBox(_T("二级菜单指针为空")); // 添加 return; } 还是上面的代码,使用pos的方法 改变这个值,运行调试一路过了。。 但是用ID的值来改变,却也不报错,也不改变任何东西。。。 就是说现在 我还是没整明白。老师有空的话,给我看看
向立天 2014-07-18
  • 打赏
  • 举报
回复
引用 2 楼 a13728843352 的回复:
[quote=引用 1 楼 xianglitian 的回复:] 先调试看看菜单的句柄是不是空的
你是说主菜单的句柄? 还是说我这个 CMenu *pSecondMenu=pTestMenu->GetSubMenu(1); 这句话里面的呢?[/quote]哪里报错看哪里啊 程序都是调出来的
  • 打赏
  • 举报
回复
引用 1 楼 xianglitian 的回复:
先调试看看菜单的句柄是不是空的
你是说主菜单的句柄? 还是说我这个 CMenu *pSecondMenu=pTestMenu->GetSubMenu(1); 这句话里面的呢?
  • 打赏
  • 举报
回复
引用 6 楼 xianglitian 的回复:
这是baidu百科 http://baike.baidu.com/view/1080164.htm?fr=aladdin#1 里面有这样的描述 一旦菜单被修改,无论它是否在显示窗口里,应用程序必须调用函数DrawMenuBar。要修改已存在菜单项的属性,使用函数CheckMenultem和EnableMenultem更快。 你的问题可能和这个有关 我还记得以前做菜单要加check标识 需要重载菜单更新信息才能实现 不过那个是对话框 你这个应该是但文档不会存在那个问题 但如果确认菜单项已经被修改了但没有显示出来 应该考虑是不是没有及时更新
谢谢咯
向立天 2014-07-17
  • 打赏
  • 举报
回复
先调试看看菜单的句柄是不是空的

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧