User interface 在运行时更改菜单项标题
我有一份菜单,上面有各种各样的菜单项,就像你平时做的那样。每个菜单项(按钮)都有一个标题,我想在运行时更改该标题。在一个没有问题的普通按钮上,我只调用User interface 在运行时更改菜单项标题,user-interface,mfc,menu,menuitem,visual-studio-2003,User Interface,Mfc,Menu,Menuitem,Visual Studio 2003,我有一份菜单,上面有各种各样的菜单项,就像你平时做的那样。每个菜单项(按钮)都有一个标题,我想在运行时更改该标题。在一个没有问题的普通按钮上,我只调用GetDlgItem(ID)->SetWindowText(CString) 但是,我不能在菜单项上这样做,因为我不能为它们中的任何一个分配ID。属性编辑器中的ID字段实际上表示“ID无法编辑” 那么如何在运行时更改菜单项文本呢 编辑:我已尝试使用CMenu::ModifyMenu,但未成功。我不知道如何指定要更改的按钮(元素)。此外,我对将CSt
GetDlgItem(ID)->SetWindowText(CString)代码>
但是,我不能在菜单项上这样做,因为我不能为它们中的任何一个分配ID。属性编辑器中的ID字段实际上表示“ID无法编辑”
那么如何在运行时更改菜单项文本呢
编辑:我已尝试使用CMenu::ModifyMenu,但未成功。我不知道如何指定要更改的按钮(元素)。此外,我对将CString作为论点传递的方式的正确性表示怀疑
这是我的(失败的)尝试:
这(对ModifyMenu方法的调用)引发调试断言错误。请不要说我不知道nIDNewItem是什么。菜单不是窗口,它们是菜单。不能使用GetDlgItem
访问菜单
在MFC中,CMenu
类可用于创建和/或控制菜单。可能就是您要查找的对象。您可以尝试在菜单选项的\u UPDATE\u命令\u UI
处理程序中添加,并在其中调用pCmdUI->SetText()
。您确定调用GetMenu
返回的是有效的CMenu吗?尝试只调用GetMenu()
而不是m\u wndToolBar.GetMenu()
您对ModifyMenu
的调用似乎是正确的,如果您通过位置传递MF\u,则不需要第三个参数。还要注意,第一个参数(位置)从0开始。您应该首先获得菜单项的命令id。试试这个:
tr = L"Foo";
CMenu * pMenu = m_wndToolBar.GetMenu();
MENUITEMINFO info;
info.cbSize = sizeof(MENUITEMINFO);
info.fMask = MIIM_ID;
VERIFY(pMenu->GetMenuItemInfo(1, &info, TRUE));
pMenu->ModifyMenuW(info.wID, MF_BYCOMMAND | MF_STRING, info.wID, tr);
谢谢你的回答。我以前偶然发现了CMenu::ModifyMenu,但是我没有成功地更改标题。请看我编辑的问题!谢谢
tr = L"Foo";
CMenu * pMenu = m_wndToolBar.GetMenu();
MENUITEMINFO info;
info.cbSize = sizeof(MENUITEMINFO);
info.fMask = MIIM_ID;
VERIFY(pMenu->GetMenuItemInfo(1, &info, TRUE));
pMenu->ModifyMenuW(info.wID, MF_BYCOMMAND | MF_STRING, info.wID, tr);