您的位置:首页 > 其它

MFC菜单的一些操作

2013-10-18 13:58 344 查看
//添加菜单项复选标记
//通过索引标记新建菜单
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);
//通过ID标记打开菜单
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_OPEN,MF_BYCOMMAND|MF_CHECKED);
//设置默认菜单项,每个菜单只能有一个默认菜单项
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);
GetMenu()->GetSubMenu(0)->SetDefaultItem(5,TRUE);
//设置图形标记菜单
m_bitmap.LoadBitmap(IDB_MYCUT);
GetMenu()->GetSubMenu(1)->SetMenuItemBitmaps(2,MF_BYPOSITION,&m_bitmap,&m_bitmap);
//获取位图的大小,宽和高的参数

// CString str;

// str.Format(_T("x=%d,y=%d"),GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));

// MessageBox(str);
//禁用菜单项,需要在初始化构造函数中改变m_bAutoMenuEnable的值为FALSE
GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
//移除菜单命令
SetMenu(NULL);
//加载自己的菜单
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
//由于menu是局部变量,将导致出错,解决方法有两个,一个是将其变为CMainFrame的对象,一个是
//用Detach()函数把菜单句柄和这个菜单对象分离。
menu.Detach();
//添加Test2菜单项
CMenu menu2;
menu2.CreateMenu();

// GetMenu()->AppendMenu(MF_POPUP,(UINT)menu2.m_hMenu,_T("Test2"));
//插入菜单项
GetMenu()->InsertMenu(2,MF_POPUP|MF_BYPOSITION,(UINT)menu2.m_hMenu,_T("Test3"));
menu2.AppendMenu(MF_STRING,IDM_HELLO,_T("hell0"));
menu2.AppendMenu(MF_STRING,IDM_BYE,_T("Bye"));
menu2.AppendMenu(MF_STRING,IDM_MYBOLE,_T("Mybole"));
menu2.Detach();
GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,61449,_T("Welcome"));
GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE_OPEN,MF_BYCOMMAND|MF_STRING,61450,_T("VC编程"));
//删除菜单
GetMenu()->DeleteMenu(1,MF_BYPOSITION);
GetMenu()->GetSubMenu(0)->DeleteMenu(0,MF_BYPOSITION);
return 0;

下面是很值得注意的一点:

//将m_bAutoMenuEnable改为FALSE之后,MFC就不在利用它的菜单命令更新机制去判断哪个菜单
//可以使用,哪个菜单不能使用,所以其也就不能根据菜单项的状态以不同的外观来显示。而这
//些操作需要我们自己来完成。
m_bAutoMenuEnable=FALSE;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc