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

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;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值