如何实现菜单的动态切换?
在MDI程序中,我有两个主菜单(下拉式的)文件 和 编辑(平行的) ;它们下面各自有两个菜单:
ID_FILE_ONE 打开文件一
ID_FILE_TWO 打开文件二ID_EDT_ONE //含义如下:
ID_EDT_TWO // 注意:当用户在文件菜单中先选择了 ID_FILE_ONE 时,两个编辑菜单分别显示为: 拷贝 和 粘贴 并且实现相应的编辑功能!(同时显示文件一的内容) 当用户在文件菜单中选择了 ID_FILE_TWO 时, 两个编辑菜单分别显示为: 向前翻-页 和 向后翻一页 并且实现相应的翻页功能!(同时显示文件二的内容)我想实现上面所说的,菜单的动态切换功能,(编辑菜单的位置相同,但是在用户选择不同的,文件选项后,编辑菜单的内容能个动态的切换,并且实现相应的功能)我只是把我的问题打个比方,希望实现类似的功能,希望大家帮忙!
在MDI程序中,我有两个主菜单(下拉式的)文件 和 编辑(平行的) ;它们下面各自有两个菜单:
ID_FILE_ONE 打开文件一
ID_FILE_TWO 打开文件二ID_EDT_ONE //含义如下:
ID_EDT_TWO // 注意:当用户在文件菜单中先选择了 ID_FILE_ONE 时,两个编辑菜单分别显示为: 拷贝 和 粘贴 并且实现相应的编辑功能!(同时显示文件一的内容) 当用户在文件菜单中选择了 ID_FILE_TWO 时, 两个编辑菜单分别显示为: 向前翻-页 和 向后翻一页 并且实现相应的翻页功能!(同时显示文件二的内容)我想实现上面所说的,菜单的动态切换功能,(编辑菜单的位置相同,但是在用户选择不同的,文件选项后,编辑菜单的内容能个动态的切换,并且实现相应的功能)我只是把我的问题打个比方,希望实现类似的功能,希望大家帮忙!
显示我觉得是不难的
多设置个flag表示现在的状态 然后根据状态 选择性的装载。
,然后
OnCommandFileTwo()
{
CMenu *pMenu=GetMenu();
pMenu->ModifyMenu(ID_EDT_ONE1, MF_BYCOMMAND|MF_STRING,ID_EDIT_ONE2,"编辑");
pMenu->ModifyMenu(ID_EDT_TWO1, MF_BYCOMMAND|MF_STRING,ID_EDIT_TWO2,"编辑");
}OnCommandFileOne()
{
CMenu *pMenu=GetMenu();
pMenu->ModifyMenu(ID_EDT_ONE2, MF_BYCOMMAND|MF_STRING,ID_EDIT_ONE1,"向前");
pMenu->ModifyMenu(ID_EDT_TWO2, MF_BYCOMMAND|MF_STRING,ID_EDIT_TWO1,"向后");
}
我也是没有经过测试的
参考MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cmenu_class_members.asp
这里MF_BYCOMMAND|MF_STRING也不知道对不对
如果不对
可用MF_BYCOMMAND替代
ID_EDT_TWO1,
ID_EDT_ONE2
ID_EDT_TWO2,
是怎么定义的?调试一下吧?很快的!!!我得分很多!!!
ID_EDT_ONE1 拷贝
ID_EDT_TWO1 粘贴
ID_EDT_ONE2 向前翻页
ID_EDT_TWO2 向后翻页
通过类向导生成他们对应的函数
然后删除刚开始不用的两个
这些ID,和消息映射VC可能会保存
#define ID_EDIT_ONE1 100在头文件中
void OnEditOne1();在cpp文件中的
END_MESSAGE_MAP()
之前加入
ON_COMMAND(ID_EDIT_ONE1, OnEditOne1)
然后实现该函数
加入一个UPDATE_COMMAND_UI消息
if(bFlag)
{
CMenu *pMenu=GetMenu();
if(pMenu)
{
CMenu popMenu;
popMenu.LoadMenu(IDR_MENU2);
CMenu* popMenu2=popMenu.GetSubMenu(0);
pMenu->ModifyMenu(ID_HELLO,MF_POPUP,(UINT)popMenu2->GetSafeHmenu(),"&Popup");
}
}
}