【MFC基础】14菜单Menu

1、创建弹出菜单

(1)、利用向导,创建一个基于单文档的应用程序;
(2)、在资源视图中选中”menu”,鼠标右键插入一新菜单IDR_POPMENU;
(3)、在IDR_POPMENU菜单中添加”弹出菜单”选项,在”弹出菜单”下添加菜单命令”复制”、”粘贴”、”查找”、”测试”,分别修改其ID;
(4)、分别对四个选项,添加消息处理函数,选中某选项,鼠标右键单击,选择Add Event Handler,类的类型选中view,消息类型选择COMMAND;
(5)、选择Class View,选中view类,添加鼠标右键单击消息;
(6)、在此右键单击消息中添加如下代码即可:

CMenu   menu;
menu.LoadMenu(IDR_POPMENU);
CMenu   *pContextMenu=menu.GetSubMenu(0);
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x, point.y, AfxGetMainWnd());

2、创建动态菜单

(1)、利用向导,创建一个基于单文档的应用程序;
(2)、在资源视图中选中”menu”,鼠标右键插入一新菜单IDR_DYN;
(3)、在IDR_DYN菜单中添加”动态菜单”选项,在”动态菜单”下添加菜单命令”FIRST动态菜单”、”SECOND动态菜单”,分别修改其ID;
(4)、分别对两个选项,添加消息处理函数,选中某选项,鼠标右键单击,选择Add Event Handler,类的类型选中CMainFrame,消息类型选择COMMAND;
(5)、在资源视图中,定位到IDR_MAINFRAME主菜单,添加新项”动态菜单演示”选项,在”动态菜单演示”下添加两个新项”添加动态菜单”、”删除动态菜单”,修改ID;
(6)、添加”添加动态菜单”消息处理函数,类的类型选中CMainFrame,消息类型选择COMMAND;添加如下代码:

CMenu m_addMenu,*m_pMainmenu;
if (!m_addMenu.LoadMenu(IDR_DYN))
{
   MessageBox(_T("动态菜单装入失败!"),_T("错误"),MB_OK|MB_ICONERROR);
   return;
}
CString str=_T("自己的动态菜单(&D)");
m_pMainmenu=AfxGetMainWnd()->GetMenu();
m_pMainmenu->InsertMenu(1,MF_POPUP|MF_BYPOSITION|MF_STRING,(UINT)m_addMenu.GetSubMenu(0)->m_hMenu,str);

m_pMainmenu->Detach();
m_addMenu.Detach();
DrawMenuBar();

(7)添加”删除动态菜单”消息处理函数,类的类型选中CMainFrame,消息类型选择COMMAND;添加如下代码:

CMenu *m_pMainmenu;
CString str;
m_pMainmenu=AfxGetMainWnd()->GetMenu();
for (int i=m_pMainmenu->GetMenuItemCount()-1;i>=0;i--)
{
   m_pMainmenu->GetMenuString(i, str,MF_BYPOSITION);
   if (str==_T("自己的动态菜单(&D)"))
   {
       m_pMainmenu->DeleteMenu(i,MF_BYPOSITION);
       break;
   }
}
m_pMainmenu->Detach();
DrawMenuBar();

3、创建若干对话框的菜单

(1)、利用向导,创建一个基于对话框的应用程序;
(2)、选中资源视图,鼠标右键插入ResourceàMenu,ID为IDR_DLG_MENU;
(3)、为IDR_DLG_MENU添加项目”对话框菜单”,然后在该项目下添加”文件菜单”、”运行记事本菜单”、”退出应用程序菜单”,并修改其ID;
(4)、在对话框属性窗口中选中menu,设置为IDR_DLG_MENU;
(5)、分别对三个选项,添加消息处理函数,选中某选项,鼠标右键单击,选择Add Event Handler,类的类型选中Dlg类,消息类型选择COMMAND;
(6)、在”运行记事本菜单”消息处理函数中,添加如下代码:

::ShellExecute(this->m_hWnd, "open","NOTEPAD.EXE", NULL,NULL, SW_SHOWNORMAL);

(7)、在”退出应用程序菜单”消息处理函数中,添加如下代码:

OnOK();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperJun12345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值