菜单主要内容:1.使用应用程序向导建立单文档应用程序框架2.资源编辑器编辑菜单、快捷键、快捷菜单、工具栏等资源。3.类向导处理菜单消息4.菜单控制一、利用AppWizard生成程序框架(Menu)项目名称:Menu选择单文档界面应用程序(Singledocument)二、编辑资源在资源浏览窗口双击Menu文件夹中ID为IDR_MAINFRAME菜单模板,用鼠标右击最后一列虚线矩形框,选择“Properties”菜单命令,在Caption编辑框中输入“画图”,并选中“Pop-up”项(默认),将在窗口菜单中添加新的“画图”菜单项。在该菜单组下继续添加下面两个菜单项:IDCaptionID_DRAW_RECT矩形ID_DRAW_CIRCLE椭圆如果现在编译运行,可以看到菜单命令是灰色的,是禁止使用。三、加入菜单消息处理函数启动类向导,在视类CMenuView单击消息处理标签,选择ID对象ID_DRAW_RECT,选择COMMAND菜单单击消息,单击“AddFunction…”按钮命令,在弹出的对话框中可以修改菜单命令处理函数名字,在此单击“OK”按钮使用其默认的名字OnDrawRect。同样为ID_DRAW_CIRCLE菜单命令添加处理函数OnDrawCircle。函数具体代码如下:voidCMenuView::OnDrawRect(){//TODO:AddyourcommandhandlercodehereCClientDCdc(this);dc.Rectangle(50,50,200,150);//画矩形}voidCMenuView::OnDrawCircle(){//TODO:AddyourcommandhandlercodehereCClientDCdc(this);dc.Ellipse(250,50,400,150);//画椭圆}现在可以编译运行,使用两个菜单命令。四、菜单命令的更新控制在画图菜单中再添加两个菜单项:CaptionID允许画矩形ID_DRAW_ENABLE禁止画矩形ID_DRAW_DISABLE在视类中添加一个记录当前“矩形”菜单项状态的变量BOOLm_Enable;在构造函数中初始化数据成员m_Enablem_Enable=TRUE;添加菜单响应函数ClassNameObjectsIDsMessagesCMenuTestViewID_DRAW_ENABLECOMMANDCMenuTestViewID_DRAW_DISABLECOMMANDCMenuTestViewID_DRAW_RECTUPDATE_COMMAND_UICMenuTestViewID_DRAW_ENABLEUPDATE_COMMAND_UICMenuTestViewID_DRAW_DISABLEUPDATE_COMMAND_UI菜单显示之前产生UPDATE_COMMAND_UI消息。函数代码如下:voidCMenuView::OnUpdateDrawRect(CCmdUI*pCmdUI){//TODO:AddyourcommandupdateUIhandlercodeherepCmdUI-Enable(m_Enable);}voidCMenuView::OnDrawEnable(){//TODO:Addyourcommandhandlercodeherem_Enable=TRUE;}voidCMenuView::OnUpdateDrawEnable(CCmdUI*pCmdUI){//TODO:AddyourcommandupdateUIhandlercodeherepCmdUI-SetCheck(m_Enable?1:0);//设置或取消标志}voidCMenuView::OnDrawDisable(){//TODO:Addyourcommandhandlercodeherem_Enable=FALSE;}voidCMenuView::OnUpdateDrawDisable(CCmdUI*pCmdUI){//TODO:AddyourcommandupdateUIhandlercodeherepCmdUI-SetCheck(m_Enable?0:1);//禁用或激活菜单}现在可以编译运行,观察菜单的控制方法。五、菜单助记符和快捷键重新编辑下面菜单资源CaptionIDPrompt矩形(&R)\tCtrl+RID_DRAW_RECT在视中画矩形椭圆(&C)\tAlt+CID_DRAW_CIRCLE在视中画椭圆画图(&T)&T、&R、&C为菜单助记符,通过Alt+T、Alt+R、Alt+C键使用菜单命令。如果在Prompt编辑框中输入字符,每当鼠标移到该菜单项时,在程序窗口下面的状态栏内显示字符提示信息。为了能够使用快捷键Ctrl+R和Alt+C画矩形和椭圆,需要编辑快捷键资源。在资源编辑器窗口,双击Accelerator文件夹中IDR_MAINFRAME快捷键资源表,表中是该程序已经定义的快捷键。双击最后空白行,显示AccelProperties对话框在ID编辑框选择或输入ID_DRAW_RECT,在Key框输入R,并选择Ctrl复选框。继续为ID_DRAW_CIRCLE定义快捷键(略)。编译运行,实验验证。六、工具栏按钮双击Toolbar文件夹中IDR_MAINFRAME工具栏资源,可以看到8个工具栏图标。单击最右边空白图标,编辑图标。完成编辑后,双击最右边图标,显示下面对话框,在ID框输入ID_DRAW_RECT。现在编译运行,就可以使用工具栏命令画矩形。七、快捷菜单在Workspace项目工作区管理窗口,打开ResourceView资源浏览窗口,用鼠标右击Menu文件夹,选择InsetMenu快捷菜单命令插入新的菜单资源IDR_MENU1(默认ID),右击IDR_MENU1,选择Properties命令,选中Pop-up,Caption框输入Popup1,创建菜单组。在该组中添加下面两个菜单项:CaptionIDPrompt矩形(&R)\tCtrl+RID_DRAW_RECT在视中画矩形椭圆(&C)\tAlt+CID_DRAW_CIRCLE在视中画椭圆在IDR_MENU1菜单资源编辑窗口打开状态下启动类向导程序,由于新加入了菜单资源,类向导提示为其创建一个新类,或为其选择一个已经存在的类,这里我们选择已存在的类CMenuView。然后在CMenuView处理WM_CONTEXTMENU消息,添加响应函数OnContextMenu,代码如下:voidCMenuView::OnContextMenu(CWnd*pWnd,CPointpoint){//TODO:AddyourmessagehandlercodehereCMenumenu;if(menu.LoadMenu(IDR_MENU1)){CMenu*pPopup=menu.GetSubMenu(0);pPopup-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);}}编译运行,使用快捷菜单画矩形和圆。八、动态菜单