//标记菜单
//GetMenu()->GetSubMenu(0)->CheckMenuItem(2,MF_BYPOSITION |MF_CHECKED);//索引方式
//GetMenu()获得菜单CMenu对象指针,
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_SAVE,MF_BYCOMMAND |MF_CHECKED);//ID方式
//默认菜单项
//GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);//索引方式
GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,FALSE);//ID方式
//注:一个子菜单项只能有一个默认菜单项
//创建位图菜单
/* CString str;
str.Format("x=%d y=%d",GetSystemMetrics(SM_CXMENUCHECK),//获取系统信息:选择菜单位图大小
GetSystemMetrics(SM_CYMENUCHECK));
MessageBox(str); */
m_map1.LoadBitmap(IDB_BITMAP1);
m_map2.LoadBitmap (IDB_BITMAP2);
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(2,MF_BYPOSITION,&m_map1,&m_map2);
//将一个菜单项设为无效且变灰
GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
//必须在CMainFrame的构造中加入m_bAutoMenuEnable = FALSE;才能生效
SetMenu(NULL);//去掉一个菜单
CMenu menu;//此处的定义应为全局变量,否则用menu.Detach()将资源与对象断开
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);//重新显示一个菜单
menu.Detach();//将资源与对象断开
//命令更新机制
void CMainFrame::OnUpdateFileSaveAs(CCmdUI* pCmdUI)
{
if(ID_FILE_SAVE_AS==pCmdUI->m_nID)//两种方式
pCmdUI->Enable( FALSE);
if(3==pCmdUI->m_nIndex)
pCmdUI->Enable(TRUE);
}
//弹出式菜单的建立
void CLesson3View::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu menu;
menu.LoadMenu(IDR_MENU1);
ClientToScreen(&point); //将客户区坐标转换为screen坐标
CMenu* pmenu=menu.GetSubMenu(0);
pmenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this);//显示菜单
CView::OnRButtonDown(nFlags, point);
}
//动态菜单操作
CMenu submenu;
submenu.CreatePopupMenu();//创建子菜单
//GetMenu()->AppendMenu(MF_POPUP,(UINT)submenu.m_hMenu,"popmenu" );//添加一个子菜单
GetMenu()->InsertMenu(2,MF_BYPOSITION | MF_POPUP,
(UINT)submenu.m_hMenu ,"popmenu");//插入一个子菜单
submenu.AppendMenu(MF_STRING,1101,"MENU1");//添加菜单项
submenu.AppendMenu(MF_STRING,1102,"MENU2");
submenu.AppendMenu(MF_STRING,1103,"MENU3");
submenu.Detach();
GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,114,"MENU4");
GetMenu()->GetSubMenu(0)->InsertMenu(1,MF_BYPOSITION| MF_STRING,115,"MENU5");
GetMenu()->DeleteMenu(1,MF_BYPOSITION);//删除一个子菜单
GetMenu()->GetSubMenu(0)->DeleteMenu(2,MF_BYPOSITION);//删除一个菜单项
DrawMenuBar(); //重画菜单栏
Invalidate();//设客户区为无效,而引起重
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/JidanIt/archive/2008/07/17/2664140.aspx