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();