VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)

新建空白工程:
免积分下载源码工程!搭配源码看文章
资源底部有源码,可以搭配源码来看。
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第1张图片在这里,我不将空白对话框作为Menu菜单的窗口,我们新建一个窗口:

VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第2张图片右键添加AddResource ->MENU
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第3张图片
依次类推:
我们给对话窗口添加一个类,方便我们做管理:
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第4张图片

接下来给按钮添加响应,如图所示:
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第5张图片选择我们刚才新建的对话类窗口:
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第6张图片
菜单栏单选

void CTOOLBOXMENU::On32774()
{
	// TODO: 我们在ID_32774这个菜单上实现 单选。
	//我们的[菜单栏学习]->[打开]->子菜单是从32773 - 32778
    //例程-单选实现
   CMenu* menu = GetMenu()->GetSubMenu(0);    //获得菜单项的第0个子菜单 即[菜单栏学习]这一列
   menu->CheckMenuRadioItem(ID_32773, ID_32778, ID_32774, MF_BYCOMMAND);  //设置32774单选状态
}

去主文件中吧窗口切换到菜单栏学习窗口
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第7张图片
去对话框窗口属性吧菜单栏选上
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第8张图片
运行效果如下:
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第9张图片接下来我们给32776添加一个一样的

void CTOOLBOXMENU::On32776()
{
	// TODO: Add your command handler code here
	//例程-选中类  //改为ID_32776为选中项
GetMenu()->GetSubMenu(0)->CheckMenuRadioItem(ID_32773, ID_32778, ID_32776,MF_BYCOMMAND);
}

运行效果如下:
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第10张图片
菜单栏选中加√

2和4只能选中其中之一,不能实现多选。

接下来我们在[关闭]这一栏为按钮添加复选效果
步骤跟上述一样,代码如下:

void CTOOLBOXMENU::On32779()
{
// TODO: Add your command handler code here
//例程-复选框
CMenu* menu = GetMenu()->GetSubMenu(0);
menu->CheckMenuItem(ID_32779, MF_BYCOMMAND | MF_CHECKED);//通过命令ID,选中ID_32779 
}



void CTOOLBOXMENU::On32780()
{
// TODO: Add your command handler code here
//例程-复选框
CMenu* menu = GetMenu()->GetSubMenu(0);
menu->CheckMenuItem(ID_32780, MF_BYCOMMAND | MF_CHECKED);//通过命令ID,选中ID_32780
}

运行效果如下:
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第11张图片

给菜单添加示例位图
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第12张图片
代码如下:

BOOL CTOOLBOXMENU::OnInitDialog()
{
CDialogEx::OnInitDialog();

// TODO:  位图代码添加到这里
CMenu *pMenu=GetMenu();
CMenu *pSubMenu=pMenu->GetSubMenu(1);
 for(int i=0;i<3;i++)
 {
	 CBitmap bmpmenu;
	 bmpmenu.LoadBitmap(IDB_MENU);
	 pSubMenu->SetMenuItemBitmaps(i,MF_BYPOSITION,&bmpmenu,&bmpmenu);
      bmpmenu.Detach();
 }
// END: 位图代码结束

return TRUE;  // return TRUE unless you set the focus to a control
}

运行结果如下:
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第13张图片

设计弹出式菜单
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第14张图片

//弹出式菜单   右键
void CTOOLBOXMENU::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
 CMenu *Menu=GetMenu();
 ClientToScreen(&point);//将窗口坐标转换成屏幕坐标
 Menu->GetSubMenu(0)->TrackPopupMenu(
  TPM_LEFTBUTTON|TPM_VERTICAL,point.x,point.y,this);
 Menu->Detach();

CDialogEx::OnRButtonUp(nFlags, point);
}

效果如下图所示:
VS2010 MFC Dialog类的MENU菜单的单选、复选、菜单位图及右键弹出菜单教程(附源码)_第15张图片
源码链接:源码连接及笔记

你可能感兴趣的:(MFC,MENU,visual,studio)