菜单、工具栏和状态栏实验步骤:01.利用MFCAppWizard[exe]创建SDI应用程序,项目名为wx203_1。02.单击项目工作区窗口下的ResourseView标签,打开资源列表。展开Menu,双击Menu下的IDR_MAINFRAME即可打开菜单编辑器,如图所示。03.为程序添加顶层菜单项。双击菜单编辑器中具有虚线的空白框,打开菜单属性对话框,如图所示。在Caption中输入菜单项标题“画图[&D]”。04.为顶层菜单添加下拉菜单。在菜单编辑器中单击“画图[&D]”,双击下方的新菜单项框,弹出菜单属性对话框。在ID框中输入ID_DRAW_ELLIPSE,在Caption框中输入菜单项标题“椭圆[&E]\tCtrl+E”。在Prompt框中输入次菜单的提示信息“在视图窗口画一个椭圆\n画椭圆”。05.重复第03、04步,设计的菜单如图所示。各菜单项的ID值如表所示:菜单ID各菜单项的ID值ID_DRAW_ELLIPSE椭圆[&E]\tCtrl+EID_DRAW_TRIANGLE三角形[&T]ID_DRAW_RECTANGLE矩形[&R]ID_COLOR_RED红色[&R]ID_COLOR_GREEN绿色[&G]ID_COLOR_BLUE蓝色[&B]ID_COLOR_CUSTOM自定义...06.添加消息处理函数。在视图类CWx203_1View的定义中添加如下的数据成员:在视图类CWx203_1View的构造函数中对数据成员进行初始化:按下Ctrl+W打开ClassWizard对话框,选中MessageMaps标签,在Classname中选择类名CWx203_1View,在ObjectsIds下选择ID_DRAW_ELLIPSE,在Messages框中选择COMMAND,单击AddFunction为椭圆菜单添加消息处理函数,单击EditCode按钮打开代码编辑窗口,编辑消息处理函数:同样为其它菜单添加WM_COMMAND消息处理函数如下:编辑视图类OnDraw函数,在其中添加如下代码:编译、链接和运行程序,如下图所示:07.为“画图”下拉菜单添加用户界面更新处理函数。在Messages列表框中选择UPDATE_COMMAND_UI。用户界面更新处理函数如下:08.单击项目工作窗口下的ResourceView标签,打开资源列表。展开Accelerator,双击IDR_MAINFRAME,打开快捷键编辑器。双击空白处,选中“椭圆”的ID值为ID_DRAW_ELLIPSE,在Key中输入E,在Modifiers中选中Ctrl,则椭圆的快捷键为Ctrl+E。09.添加“颜色”的快捷菜单。在视图类中添加消息WM_CONTEXTMENU的处理函数,在函数中添加如下代码:运行时,当在视图窗口中右击鼠标时,弹出快捷菜单,如图所示:10.通过编程增加两个菜单“缩放”和“修改菜单”。单击项目工作窗口下的FileView标签,展开SourceFiles,双击Resource.h打开资源头文件,在其中添加如下语句:创建两个子菜单,并将其添加到顶层菜单中。在CmainFrame类的OnCreate成员函数中添加如下代码:为子菜单项添加命令处理函数。对于通过编程创建的菜单项,只能手工添加消息处理函数。打开CWx203_1View.h,在其中找到DECLARE_MESSAGE_MAP,在DECLARE_MESSAGE_MAP之上、注释//}}AFX_MSG之下添加消息处理函数模型:再打开CWx203_1View.cpp文件,在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间添加消息映射项。在视图类的实现文件CWx203_1View.cpp中添加消息处理函数的函数体如下:修改视图类OnDraw以适应菜单的变化。在CWx203_1View类的定义中增加一个int数据成员m_nFlags,用于记录执行创建菜单“缩放”的情况,并在构造函数黄总将其初始化为0。修改OnDraw,增加如下代码:编译、链接和运行程序,结果如下:11.创建一个英文的菜单资源,并允许在中英文之间进行切换。在项目工作窗口选中ResourceView标签,打开资源菜单,增加顶层菜单命令“英文”,并取消Pop-up属性,指定其ID值为ID_ENGLISH,Caption为英文。单击项目工作窗的ResourceView标签,在窗口中右击Menu,选择InsertMenu命令,插入新的菜单资源。右击插入的资源ID,选择Properties命令,ID修改为IDR_ENGLISH。添加如下图所示的菜单,为了与中文菜单共用相同的菜单命令处理函数,各对应菜单的ID应与IDR_MAINFRAME中的菜单ID相同。取消菜单明林CHINESE的Pop-up属性,ID值为ID_CHINESE。在主框架窗口类CMainFrame中为“英文”“CHINESE”添加命令消息处理函数:编译、链接和运行程序,执行“英文”命令式切换到如下:12.创建一个新的工具栏,用于执行“颜色”菜单中的命令。单击工作窗口的ResourceView标签,插入一个新的工具栏资源,ID为IDR_COLORS,添加如图四个按钮,并按表设置属性。按钮大小(宽,高)IDPrompt红色16,15ID_COLOR_RED设置图形为红色\n红色绿色16,15ID_COLOR_GREEN设置图形为绿色\n绿色蓝色16,15ID_COLOR_BLUE设置图形为蓝色\n蓝色自定义16,15ID_COLOR_CUSTOM通过颜色对话框设置图形颜色\n自定义在框架窗口类CMainFrame中添加CToolBar类的数据成员:在CMainFrame::OnCreate中添加代码:13.显示或隐藏颜色设置工具栏。在“查看”菜单下添加”颜色工具栏“菜单项,ID为ID_VIEW_COLORBAR。为”颜色工具栏“添加命令消息处理函数和用户界面更新命令消息处理函数:编译、链接和运行程序。14.给按颜色钮添加文字。首先将按钮位图的大小调整为40个像素宽、19个像素高,然后在CMainFrame::OnCreate函数的语句m_colorToolBar.LoadToolBar(IDR_COLORS);后添加如下代码:生成的工具栏如图所示:15.在工具栏添加一个组合框,用于设置视图窗口中文本显示的字体。双击Toolbar下的IDR_MAINFRAME工具栏资源打开工具栏,删除“打印”“关于”两个按钮,然后添加如图所示的4个按钮并设置属性。按钮IDPrompt加粗ID_BOLD\n加粗倾斜ID_ITALIC\n倾斜下划线ID_UNDERLINE\n下划线预留位置缺省在视图类CWx203_1View的头文件中增加如下文本属性的数据成员:然后在视图类CWx203_1View的构造函数中初始化新增的数据成员:在编辑类视图CWx203_1View的OnDraw成员函数,创建字体并选入设备环境,在视图窗口的底部显示文本:为工具栏按钮添加命令消息处理函数和用户界面更新命令处理函数:在工具栏的预留位置添加组合框,首先在CMainFrame的头文件中增加CcomboBox类的对象函数:再执行View-ResourceSymbols命令,在弹出的对话框中单击New按钮,添加名称为IDC_COMBOBOX的ID标识,取缺省值。编辑CMainFrame类的OnCreate函数,在其中增加创建组合框控件的代码:在CWx203_1View中添加组合框的CBN_SELCHANGE的消息处理函数。对于通过代码创建的控件,只能通过手工方式添加。在视图类的头文件的DECLARE_MESSAGE_MAP()的上面增加消息处理函数OnSelChangeCombo原型:在视图类的实现文件BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间添加如下消息映射:最后在视图类CWx203_1View的实现文件中编辑新增的组合框消息处理函数:在CWx203_1View的实现文件的开始处包含主框架窗口类CMainFrame的头文件:编译、链接和运行程序:16.打开字符串表,在其中添加下表所示的三个字符串。字符串IDCaption说明ID_INDICATOR_TIMEHH:MM:SS用于定义显示时间的窗格ID_INDICATOR_LEFT左键用于定义显示鼠标左键状态的窗格ID_INDICATOR_RIGHT右键用于定义显示鼠标右键状态的窗格在MainFrame.cpp中,将其中的indicators数组修改为如下形式:在CMainFrame::OnCreate函数中添加如下语句:此语句用于设置一个定时器,其ID值为150,定时器每隔200ms发送一个WM_TIMER消息。在CMainFrame添加WM_TIMER消息处理函数,此函数每隔200ms执行一次,并利用SetPaneText在窗格中显示时间。在MainFrm.h头文件中的DECLARE_MESSAGE_MAP()前添加函数原型:在MainFrm.cpp实现文件中的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间添加消息映射:接着添加消息处理函数的定义:在视图类CWx203_1中添加WM_MOUSEMOVE消息处理函数,在其中设置第二个窗格的文本,显示鼠标坐标。由于缺省时m_wndStatusBar的访问权限在CMainFrame类中定义成protected,因此还需将其访问权限更改为public:在视图类CWx203_1View的OnDraw函数中输出提示信息:编译、链接和运行: