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;
//通过索引标记新建菜单
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;
相关文章推荐
- Visual C++中MFC消息的分类
- IE8引发 VS2005/2008 MFC向导出错的解决方案
- VS2010/MFC编程入门之前言
- VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
- VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)
- VS2010/MFC编程入门之四(MFC应用程序框架分析)
- VS2010/MFC编程入门之五(MFC消息映射机制概述)
- VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)
- VS2010/MFC编程入门之七(对话框:为对话框添加控件)
- VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)
- VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序)
- VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)
- VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)
- VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
- VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示)
- VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)
- VS2010/MFC编程入门之十六(对话框:消息对话框)
- VS2010/MFC编程入门之十七(对话框:文件对话框)
- VS2010/MFC编程入门之十八(对话框:字体对话框)