动态添加菜单项、子菜单、右键菜单 VC 动态添加菜单项、子菜单、右键菜单(VC)2010-06-27 16:56如何动态添加菜单/菜单项、子菜单、右键菜单 有关菜单的操作主要用到 CMenu类,当然也可用相应 API函数,CMenu类只是 MFC对 API中操作菜单的函数的封装而已。不过能用类就尽量用类,类的组织方式好呗,代码看着也舒服。若是 SDK编程,那就用 API吧。 CMenu menuMain,menu1;//首先定义 CMenu对象 一、创建菜单,有两种方法 1.用 LoadMenu函数从资源加载 menuMain.LoadMenu(IDR_MAINFRAME);//从资源加载,这里使用 SDI的主菜单资源 2.用 CreateMenu函数创建 menu1.CreateMenu();//创建菜单,还没有菜单项 二、添加菜单项,可用 AppendMenu()在菜单的最后加、InsertMenu()在指定的位置加. //ID_TEST1在 Resource.h中定义,随便给个整数值,不要和已有的重复就行了 menu1.AppendMenu(MF_STRING,ID_TEST1,"Test1");//第一项菜单项 menu1.AppendMenu(MF_STRING,ID_TEST2,"Test2");//第二项菜单项 menu1.InsertMenu(1,MF_BYPOSITION|MF_STRING, (UINT)ID_TEST1,"ID_TEST1");//在第二项菜单项前添加新菜单项 三、添加子菜单 同样用 AppendMenu()、InsertMenu()函数。不过要注意参数的设置。 menu1.AppendMenu(MF_BYPOSITION|MF_POPUP|MF_STRING, (UINT)menuMain.GetSubMenu(0)-m_hMenu,"子菜单"); //第二个参数是菜单的句柄 HMENU 四、删除菜单 用 DeleteMenu()、RemoveMenu()函数来删除指定位置的菜单/菜单项。 两者区别:如果菜单项是一个弹出式菜单,那么 DeleteMenu和RemoveMenu之间的区别就很重要。DeleteMenu清除弹出式菜单,但RemoveMenu不清除它。一个是彻底的删除,一个只是移除. MSDN:1.The DeleteMenu function destroys the handle to the menu or submenu and frees the memory used by the menu or submenu.它使菜单或者子菜单的 handle无效(destroys)。2.RemoveMenu does not destroy the menu or its handle,allowing the menu to be reused.可以再利用,并不从内存中将 menu删除。 五、添加右键菜单 CMenu menu1; menu1.CreatePopupMenu();//动态创建弹出式菜单对象 menu1.AppendMenu(MF_STRING,ID_TEST1,"菜单项1"); menu1.AppendMenu(MF_STRING,ID_TEST2,"菜单项2"); menu1.InsertMenu(2,MF_BYPOSITION|MF_POPUP|MF_STRING, (UINT)menuMa...