您的位置:首页 > 其它

MFC通过获取菜单句柄,实现菜单的基本操作

2013-08-08 19:56 465 查看
1、程序的主菜单属于框架类窗口,所以应该在框架类窗口创建完成之后再去访问菜单。

2、框架类窗口创建完成的WM_CREAT消息函数OnCreat函数中对菜单进行操作。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;      // fail to create
}

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1;      // fail to create
}

// TODO: Delete these three lines if you don't want the toolbar to
//  be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

//设置 菜单项标记
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW, MF_BYCOMMAND|MF_CHECKED);
//取消 菜单项标记
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW, MF_BYCOMMAND|MF_UNCHECKED);

//设置图形标记菜单
static CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(ID_FILE_OPEN, MF_BYCOMMAND, &bmp, &bmp);

//可以通过以下方式获取菜单上显示的位图尺寸
// 	CString str;
// 	str.Format("x=%d, y=%d", GetSystemMetrics(SM_CXMENUCHECK),  GetSystemMetrics(SM_CYMENUCHECK));
// 	MessageBox(str);

//设置 默认菜单项
GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN, FALSE);

//禁用菜单项
m_bAutoMenuEnable = FALSE; //启用系统所有菜单项
GetMenu()->GetSubMenu(0)->EnableMenuItem(1, MF_BYPOSITION|MF_DISABLED|MF_GRAYED);

//启用菜单项
GetMenu()->GetSubMenu(0)->EnableMenuItem(1, MF_BYPOSITION|MF_ENABLED);

//移除当前菜单
SetMenu(NULL);

//加载一个菜单
static CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
menu.Detach(); //菜单句柄与菜单对象相互分离

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐