Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
Visual studio 2008 如何更改没有ID的菜单弹出文本_Visual Studio 2008_Menu_Mfc_Popup - Fatal编程技术网

Visual studio 2008 如何更改没有ID的菜单弹出文本

Visual studio 2008 如何更改没有ID的菜单弹出文本,visual-studio-2008,menu,mfc,popup,Visual Studio 2008,Menu,Mfc,Popup,对于许多语言,我必须动态更改菜单的弹出文本 但它并没有控制此文本的ID,如下代码参考资源所示 IDR_MENU_MAIN MENU BEGIN POPUP "File(&F)" // I want to change this BEGIN MENUITEM "Open(&O)", ID_CURVE_FILE_NEW MENUITEM SEPARATOR MENUITEM "Recent File",

对于许多语言,我必须动态更改菜单的弹出文本

但它并没有控制此文本的ID,如下代码参考资源所示

IDR_MENU_MAIN MENU 
BEGIN
    POPUP "File(&F)" // I want to change this
BEGIN
    MENUITEM "Open(&O)",                    ID_CURVE_FILE_NEW
    MENUITEM SEPARATOR
    MENUITEM "Recent File",                 ID_FILE_MRU_FILE1, GRAYED
    MENUITEM SEPARATOR
    MENUITEM "E&xit",                       ID_APP_EXIT
END
POPUP "Language(&L)"   // I want to change this
BEGIN
    MENUITEM "Traditional Chinese",         ID_LANGUAGE_CHT
    MENUITEM "Simplified Chinese",          ID_LANGUAGE_CHS
    MENUITEM "English",                     ID_LANGUAGE_ENG
    MENUITEM "Russian",                     ID_LANGUAGE_RUS
    MENUITEM "Korean",                      ID_LANGUAGE_KOR
    MENUITEM "Japanese",                    ID_LANGUAGE_JPN
END
POPUP "Help(&H)"    // I want to change this
BEGIN
    MENUITEM "", ID_APP_ABOUT
END
END

谢谢大家

尝试使用“setlocale”。

例如:
setlocale(LC_ALL,“繁体中文”)
setlocale(LC_ALL,“简体中文”)
..
..

这很棘手

我所做的是让枚举匹配菜单栏的顶级元素,然后按位置引用它们


然后,您必须使用MF_BYPOSITION,而不是使用MF_BYCOMMAND来更新它们。

以下是一些代码,用于跟踪和修改弹出菜单字符串(
menu
是主菜单的句柄);如果应用程序使用“新样式”菜单栏
CMFCMenuBar
,则需要调用
m_wndMenuBar.GetHMenu()
m_wndMenuBar.CreateFromMenu(menu,TRUE,TRUE)之前和之后分别为:

CMenu* pMenu = CMenu::FromHandle(hMenu);
int i, nCou = pMenu->GetMenuItemCount();
UINT uID;
CString ss;
for (i = 0; i < nCou; i++)
{   uID = pMenu->GetMenuItemID(i);
    if (uID == 0) // separator
    {   TRACE(_T("----------------------\n"));
        continue;
    }
    pMenu->GetMenuString(i, ss, MF_BYPOSITION);
    if (uID == (UINT)-1)
    {   TRACE(_T("Popup '%s' "), ss);
        ss += _T("-Modified");
        pMenu->ModifyMenu(i, MF_BYPOSITION, 0, ss);
        TRACE(_T("modified to '%s' "), ss);
    }
    else
        TRACE(_T("Item  '%s', ID=%d "), ss, uID);
    TRACE(_T("\n"));
}
CMenu*pMenu=CMenu::FromHandle(hMenu);
int i,nCou=pMenu->GetMenuItemCount();
UINT-uID;
CString-ss;
对于(i=0;iGetMenuItemID(i);
if(uID==0)//分隔符
{TRACE(_T(“-------------------------\n”);
继续;
}
pMenu->GetMenuString(i、ss、MF\u按位置);
如果(uID==(UINT)-1)
{跟踪(_T(“弹出'%s')),ss);
ss+=_T(“-修改”);
pMenu->ModifyMenu(i、MF\u按位置、0、ss);
跟踪(_T(“修改为“%s”),ss);
}
其他的
跟踪(_T(“项“%s”,ID=%d”),ss,uID);
跟踪(_T(“\n”);
}

我的菜单是对话框,我用CToolbar回答我的问题,更改代码

CMenu* pMenu = CMenu::FromHandle(hMenu); 


它会成功的!非常感谢

它可能不是我的适配器,因为我有很多文本change@user1753112抱歉没有帮上忙:/劳驾,我是MFC的新手,你能为我创建一个使用MF_ByCommands的示例吗谢谢你的帮助,但它不起作用,在输出窗口中显示以下消息,但它不会改变菜单弹出文本。--------------------------------------Popup'File(&F)'修改为'File(&F)-修改'Popup'Set(&S)'修改为'Set(&S)-修改'Popup'语言(&L)-修改为'Language(&L)-修改'Popup'帮助(&H)-修改'---------------------------------------我想可能是这个->“pMenu->修改菜单(I,MF_BYPOSITION,0,ss);”不工作菜单是如何托管的?[在对话框或MFC文档/视图结构中?使用CToolbar或CMFCToolbar?]如何获得
humenu
CMenu* pMenu = GetMenu();