希望动态的设置菜单显示的文本,程序中有好几个菜单是弹出式菜单
m_pMenu->LoadMenu(IDR_MAINFRAME);
if(m_pMenu == NULL)
{
MessageBox("menu is null");
return 0;
}
for(int iIndex=0;iIndex<m_pMenu->GetMenuItemCount();iIndex++)
{
CString info;
m_pMenu->ModifyMenu(iIndex,MF_BYPOSITION|MF_STRING,iIndex,"helloworld");
m_pMenu->GetMenuString(iIndex,info,MF_BYPOSITION);
MessageBox(info);
}
改完之后我马弹出对话框,刚弹出的是正确的,可是显示出来的又是原来的,怀疑修改后没有保存,或者修改的只是一个临时CMenu对象,而没有修改真正的资源文件。
如何能修改LoadMenu得到的菜单呢!!
m_pMenu->LoadMenu(IDR_MAINFRAME);
if(m_pMenu == NULL)
{
MessageBox("menu is null");
return 0;
}
for(int iIndex=0;iIndex<m_pMenu->GetMenuItemCount();iIndex++)
{
CString info;
m_pMenu->ModifyMenu(iIndex,MF_BYPOSITION|MF_STRING,iIndex,"helloworld");
m_pMenu->GetMenuString(iIndex,info,MF_BYPOSITION);
MessageBox(info);
}
改完之后我马弹出对话框,刚弹出的是正确的,可是显示出来的又是原来的,怀疑修改后没有保存,或者修改的只是一个临时CMenu对象,而没有修改真正的资源文件。
如何能修改LoadMenu得到的菜单呢!!
pMenu->LoadMenu(IDR_MAINFRAME);
CString info;
pMenu->ModifyMenu(0,MF_BYPOSITION|MF_STRING,0,"fdas");//尝试修改
//好像这里缺一个保存修改。。
pMenu->GetMenuString(0,info,MF_BYPOSITION);//
MessageBox(info);//打印刚修改的值--提示fdas CMenu * pMenu1 = new CMenu();
pMenu1->LoadMenu(IDR_MAINFRAME);//换一个对象重新加载
pMenu1->GetMenuString(0,info,MF_BYPOSITION);
MessageBox(info);//打印相同位置,结果是 --- "文件&F" 修改失败----
pMenu1->LoadMenu(IDR_MAINFRAME);//换一个对象重新加载
pMenu1->GetMenuString(0,info,MF_BYPOSITION);
MessageBox(info);//打印相同位置,结果是 --- "文件&F" 修改失败----
========================
楼主没有弄明白ModifyMenu的作用,这个是动态修改,并不是修改资源文件,而是指在运行中修改,资源文件中的菜单根本就没变
====================
你的成功指什么,菜单资源被改了吗?不可能吧
=======================================
我试过给CMainFrame类添加CMenu*对象,构造函数里面new,析构函数里面Delete,但是依然没有修改--正在尝试12楼的方法
晕,你不会在构造函数里new了就修改吧?那时候窗口都还没创建呢,这样子,构造函数里给这个pMenu赋值为NULL,然后你上面的代码这么改:if(pMenu == NULL)
{
pMenu = new CMenu();
if(pMenu->LoadMenu(IDR_MAINFRAME))
{
CString info;
pMenu->ModifyMenu(0,MF_BYPOSITION|MF_STRING,0,"fdas");//尝试修改
pMenu->GetMenuString(0,info,MF_BYPOSITION);//
MessageBox(info);//打印刚修改的值--提示fdas
}
else
MessageBox("加载菜单失败");
}
GetMenu能修改成功是因为系统已经载入了菜单(程序结束才释放),你修改的是内存中的数据并不是修改Exe文件中的菜单资源。
LoadMenu每一都需要从资源中重新生成菜单,如果你要达到你的功能那么LoadMenu 生成的菜单需要作为类的成员,并且在程序结束才释放。