Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 在运行时更改菜单项标题_User Interface_Mfc_Menu_Menuitem_Visual Studio 2003 - Fatal编程技术网

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);