修改pupop属性的菜单内容。 修改 菜单ID为IDR_MAINFRAME的pupop属性的菜单内容。比如将 “文件” 改为“file”;自己分析因为 PUPOP属性的菜单项是没有ID的!所以应该用位置来判断!自己网上百度了些方法!都会报错。求教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对话框程序的IDR_MAINFRAME可以在资源管理器下打开,然后对其进行修改。 CWnd *pWnd = AfxGetMainWnd(); CMenu *pMenu = pWnd->GetMenu(); pMenu->ModifyMenu(0, MF_BYPOSITION|MF_STRING, NULL, _T("File")); pWnd->DrawMenuBar();//刷新菜单 我做了两个Menu !直接切换! WORD nLanguage=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); HRSRC hResourse=::FindResourceEx(NULL,RT_MENU,MAKEINTRESOURCE(IDR_ENGMENU),nLanguage); if(hResourse!=NULL) { CMenu *pMenu=GetMenu(); SetMenu(NULL); if (pMenu!=NULL) { pMenu->DestroyMenu(); } HGLOBAL hMenuTemplate=LoadResource(NULL,hResourse); CMenu Menu; Menu.LoadMenuIndirect(hMenuTemplate); SetMenu(&Menu); RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); }问题:切换后的Menu使用不了!只能看! CMenu *pMenu = GetMenu();pMenu->ModifyMenu(0, MF_BYPOSITION|MF_STRING, NULL, _T("File"));DrawMenuBar();//刷新菜单试试 编译没错 运行出错 是因为你实例化对象的生命周期问题 CMenu类有一个 Detach函数 用来分离句柄和对象的在后面加上这一句试试 pMenu.Detach(); 位置搞不清 或者难得去判断的就直接用ID 还是比较保险的 MF_BYCOMMAND 你直接把"文件"菜单改成File,就行了吧,为什么删了重写呢。重写要保证ID和原来一样 因为是 pupop属性的!所以是没有ID的! 我需要做一个多国语言菜单!所以,需要在编译后控制修改目录的名称!并不是单纯只为了改Caption! 类似的东西我做过不过我是修改的对话框的菜单而且ID不是IDR_MAINFRAME不过我觉得原理应该是一样的以下代码仅供参考CMenu menuFrame; CString strMenuText; //获取框架菜单 menuFrame.Attach(GetMenu()->GetSafeHmenu()); //加载主菜单文字 strMenuText.LoadString(IDS_CHATDLG_MENU_FILE); menuFrame.ModifyMenu(0, MF_BYPOSITION, NULL, strMenuText); strMenuText.LoadString(IDS_CHATDLG_MENU_OPERATE); menuFrame.ModifyMenu(1, MF_BYPOSITION, NULL, strMenuText); //加载子菜单文字 strMenuText.LoadString(IDS_CHATDLG_SUBMENU_FILE_SAVE); menuFrame.GetSubMenu(0)->ModifyMenu(0, MF_BYPOSITION, ID_MENU_CHAT_SAVECHATRECORD, strMenuText); strMenuText.LoadString(IDS_CHATDLG_SUBMENU_FILE_HISTORY); menuFrame.GetSubMenu(0)->ModifyMenu(1, MF_BYPOSITION, ID_MENU_CHAT_HISTORYRECORD, strMenuText); strMenuText.LoadString(IDS_CHATDLG_SUBMENU_FILE_CLOSE); menuFrame.GetSubMenu(0)->ModifyMenu(3, MF_BYPOSITION, ID_MENU_CHAT_COLSE, strMenuText); strMenuText.LoadString(IDS_CHATDLG_SUBMENU_OPERATE_INVITE); menuFrame.GetSubMenu(1)->ModifyMenu(0, MF_BYPOSITION, ID_MENU_CHAT_INVITE, strMenuText); strMenuText.LoadString(IDS_CHATDLG_SUBMENU_OPERATE_SENDFILE); menuFrame.GetSubMenu(1)->ModifyMenu(2, MF_BYPOSITION, ID_MENU_CHAT_SENDFILE, strMenuText); strMenuText.LoadString(IDS_CHATDLG_SUBMENU_OPERATE_SENDMAIL); menuFrame.GetSubMenu(1)->ModifyMenu(3, MF_BYPOSITION, ID_MENU_CHAT_SENDMAIL, strMenuText); strMenuText.LoadString(IDS_CHATDLG_SUBMENU_OPERATE_SELFONT); menuFrame.GetSubMenu(1)->ModifyMenu(5, MF_BYPOSITION, ID_MENU_CHAT_CHOOSEFONT, strMenuText); 各位代码都很有用,测试都能用,就是我自己的程序不能用!可能是由于自己用了SkinMagic的原因吧!不过还是 谢谢大家。 ADO删除当前记录的一个问题 怎样实现这样的网页与界面融为一体的效果? 初学者的疑问 折行符是啥 如何提高UDP传文件的速度? 求教:MDI多文档/视图的视图分割? 如何实现图像缩放的函数 HBITMAP ZoomBitmap(HBITMAP sourcebitmap,float xScacle,float yScacle) 请问VC的SP5有些什么作用? 关于NOTIFYICONDATA中几个新成员的使用? 急!不能理解的问题 MFC debug和release 可执行程序图标问题 笔记本电脑的GE网卡用来捕获数据包,会丢包么?
CWnd *pWnd = AfxGetMainWnd();
CMenu *pMenu = pWnd->GetMenu();
pMenu->ModifyMenu(0, MF_BYPOSITION|MF_STRING, NULL, _T("File"));
pWnd->DrawMenuBar();//刷新菜单
WORD nLanguage=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US);
HRSRC hResourse=::FindResourceEx(NULL,RT_MENU,MAKEINTRESOURCE(IDR_ENGMENU),nLanguage);
if(hResourse!=NULL)
{
CMenu *pMenu=GetMenu();
SetMenu(NULL);
if (pMenu!=NULL)
{
pMenu->DestroyMenu();
}
HGLOBAL hMenuTemplate=LoadResource(NULL,hResourse);
CMenu Menu;
Menu.LoadMenuIndirect(hMenuTemplate);
SetMenu(&Menu);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
}
问题:切换后的Menu使用不了!只能看!
CMenu *pMenu = GetMenu();
pMenu->ModifyMenu(0, MF_BYPOSITION|MF_STRING, NULL, _T("File"));
DrawMenuBar();//刷新菜单
试试
编译没错 运行出错 是因为你实例化对象的生命周期问题 CMenu类有一个 Detach函数 用来分离句柄和对象的
在后面加上这一句试试 pMenu.Detach();
位置搞不清 或者难得去判断的就直接用ID 还是比较保险的 MF_BYCOMMAND
不过我是修改的对话框的菜单
而且ID不是IDR_MAINFRAME
不过我觉得原理应该是一样的
以下代码仅供参考
CMenu menuFrame;
CString strMenuText;
//获取框架菜单
menuFrame.Attach(GetMenu()->GetSafeHmenu()); //加载主菜单文字
strMenuText.LoadString(IDS_CHATDLG_MENU_FILE);
menuFrame.ModifyMenu(0, MF_BYPOSITION, NULL, strMenuText);
strMenuText.LoadString(IDS_CHATDLG_MENU_OPERATE);
menuFrame.ModifyMenu(1, MF_BYPOSITION, NULL, strMenuText); //加载子菜单文字
strMenuText.LoadString(IDS_CHATDLG_SUBMENU_FILE_SAVE);
menuFrame.GetSubMenu(0)->ModifyMenu(0, MF_BYPOSITION, ID_MENU_CHAT_SAVECHATRECORD, strMenuText);
strMenuText.LoadString(IDS_CHATDLG_SUBMENU_FILE_HISTORY);
menuFrame.GetSubMenu(0)->ModifyMenu(1, MF_BYPOSITION, ID_MENU_CHAT_HISTORYRECORD, strMenuText);
strMenuText.LoadString(IDS_CHATDLG_SUBMENU_FILE_CLOSE);
menuFrame.GetSubMenu(0)->ModifyMenu(3, MF_BYPOSITION, ID_MENU_CHAT_COLSE, strMenuText);
strMenuText.LoadString(IDS_CHATDLG_SUBMENU_OPERATE_INVITE);
menuFrame.GetSubMenu(1)->ModifyMenu(0, MF_BYPOSITION, ID_MENU_CHAT_INVITE, strMenuText);
strMenuText.LoadString(IDS_CHATDLG_SUBMENU_OPERATE_SENDFILE);
menuFrame.GetSubMenu(1)->ModifyMenu(2, MF_BYPOSITION, ID_MENU_CHAT_SENDFILE, strMenuText);
strMenuText.LoadString(IDS_CHATDLG_SUBMENU_OPERATE_SENDMAIL);
menuFrame.GetSubMenu(1)->ModifyMenu(3, MF_BYPOSITION, ID_MENU_CHAT_SENDMAIL, strMenuText);
strMenuText.LoadString(IDS_CHATDLG_SUBMENU_OPERATE_SELFONT);
menuFrame.GetSubMenu(1)->ModifyMenu(5, MF_BYPOSITION, ID_MENU_CHAT_CHOOSEFONT, strMenuText);