如何在没有ID的情况下更改菜单的POPUP文本

时间:2013-11-18 02:47:48

标签: visual-studio-2008 menu mfc popup

对于许多语言,我必须动态更改菜单的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_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

谢谢大家!

5 个答案:

答案 0 :(得分:2)

以下是TRACE的一些代码并修改弹出菜单字符串(hMenu是主菜单的句柄);如果您的应用程序使用"新样式"菜单栏CMFCMenuBar,您需要分别在之前和之后拨打m_wndMenuBar.GetHMenu()m_wndMenuBar.CreateFromMenu(hMenu, 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"));
}

答案 1 :(得分:2)

我回答我的问题,更改代码

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

CMenu* pMenu = GetMenu();

它会起作用!非常感谢!

答案 2 :(得分:0)

尝试使用' setlocale '。

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

http://msdn.microsoft.com/en-us/library/x99tb11d(v=vs.90).aspx

答案 3 :(得分:0)

这很棘手。

我所做的是拥有一个与菜单栏的顶级元素匹配的枚举,然后按位置引用它们。

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

答案 4 :(得分:-1)

我的菜单是对话框和CToolbar