菜单栏详解

1 篇文章 0 订阅

代码笔记,对话框OnInitDialog中初始化

CMenu *pMenu = GetMenu();
	//子菜单
	CMenu *pSubMenu = pMenu->GetSubMenu(0);
	m_bmpMenu.LoadBitmap(IDB_BITMAP1);
	m_bmpMenu2.LoadBitmap(IDB_BITMAP2);
	pSubMenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bmpMenu2,&m_bmpMenu);

	//创建一个分隔符 
	pSubMenu->AppendMenu(MF_SEPARATOR);
	pSubMenu->AppendMenu(MF_STRING, IDM_MENU_T, "测试");
	
	//加载快捷键
	m_AccF7 = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));

快捷键添加PreTranslateMessage(MSG* pMsg)

BOOL CMenuDlg::PreTranslateMessage(MSG* pMsg) 
{
	if(::TranslateAccelerator(GetSafeHwnd(), m_AccF7, pMsg))
	{
		return TRUE;
	}

	return CDialog::PreTranslateMessage(pMsg);
}

设置一 图标更换

//设置一选中  图标更换
void CMenuDlg::OnUpdateSet1(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CMenu *pMenu = GetMenu();
	CMenu *pSubMenu = pMenu->GetSubMenu(0);
	if(m_bmpMenuChecked == FALSE)
	{
		pSubMenu->CheckMenuItem(IDM_SET1, MF_BYCOMMAND | MF_CHECKED);
		m_bmpMenuChecked = TRUE;
	}else
	{
		pSubMenu->CheckMenuItem(IDM_SET1, MF_BYCOMMAND | MF_UNCHECKED);
		m_bmpMenuChecked = FALSE;
	}
	
	UpdateData(FALSE);
}


设置二勾选 取消

//设置二选中 勾选 取消
void CMenuDlg::OnUpdateSet2(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CMenu *pMenu = GetMenu();
	CMenu *pSubMenu = pMenu->GetSubMenu(0);
	if(m_bMenuChecked == FALSE)
	{
		pSubMenu->CheckMenuItem(IDM_SET2, MF_BYCOMMAND | MF_CHECKED);
		m_bMenuChecked = TRUE;
	}else
	{
		pSubMenu->CheckMenuItem(IDM_SET2, MF_BYCOMMAND | MF_UNCHECKED);
		m_bMenuChecked = FALSE;
	}

	UpdateData(FALSE);
}

右键弹出式菜单

void CMenuDlg::OnRButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	

	//弹出菜单
	if(!menuPopup)
		menuPopup.LoadMenu(IDR_MENU_POPUP);
	
	ClientToScreen(&point);

	menuPopup.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);

	ScreenToClient(&point);

	CDialog::OnRButtonDown(nFlags, point);
}


运行结果:



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值