欢迎来到天天文库
浏览记录
ID:50307480
大小:2.48 MB
页数:48页
时间:2020-03-07
《Visual C++应用开发与实践 教学课件 作者 刘乃琦_ VC 第3章 菜单 工具栏和状态栏.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、本章要求:第3章菜单、工具栏和状态栏使用菜单设计器设计菜单动态创建菜单使用工具栏设计器设计工具栏动态创建工具栏动态创建状态栏3.1.1菜单资源设计3.1.2菜单项的命令处理3.1.3菜单项的更新机制3.1.4菜单类的主要方法3.1.5使用菜单类创建菜单3.1.6设计弹出式菜单3.1菜单设计在VisualC++中,用户可以通过工作区方便地设计菜单资源。下面介绍如何设计菜单资源。(1)在工作区的ResourceView选项卡中,用鼠标右键单击某个节点,将弹出一个快捷菜单,如图所示。3.1.1菜单资源设计鼠标右键单击该节点,在弹出的快捷菜单中选择“Insert”菜
2、单项工作区的资源视图窗口(2)在弹出菜单中选择Insert菜单项,打开InsertResource窗口,如图所示选择新添加的菜单资源(3)在Resourcetype列表框中选择Menu节点,单击“New”按钮,创建一个菜单,如图所示选中菜单项,按“Enter”键打开菜单属性窗口(4)在菜单设计窗口中,按〈Enter〉键打开属性窗口,设计菜单标题,如图所示(5)按〈Enter〉键保存设置,返回到菜单设计窗口,如图所示。(6)如果用户需要设计子菜单,可以选中下方的虚边框,按〈Enter〉键打开属性窗口,在属性窗口中设置菜单项标题和菜单ID,如图所示。说明:在设计
3、菜单时,通常需要修改菜单项默认的命令ID,使其体现出菜单项的功能。这样做虽然在程序功能上无关紧要,但是通过菜单项命令ID,其他人可以非常容易地了解菜单项的功能,方便他人阅读代码。(7)按〈Enter〉键保存设置,返回到菜单设计窗口,图所示。(8)如果用户想要设计一个级联菜单,可以在菜单项的属性窗口中选中Pop-up复选框,这样,在菜单项的右侧将显示一个箭头,效果如图3-8所示。如果一个菜单项不是顶层菜单或弹出式菜单,则菜单项有一个菜单ID,即使用户不设置菜单ID,系统也会为其指定一个惟一的菜单ID。通过菜单ID,用户可以处理菜单项的命令消息。其具体操作步骤如
4、下。(1)单击菜单栏中的“View”/“ClassWizard”命令,打开MFCClassWizard窗口,并选择MessageMaps选项卡,在ObjectIDs列表框中选择一个菜单项,如图所示。3.1.2菜单项的命令处理(2)在该窗口的Messages列表框中双击COMMAND,将打开“添加成员函数”窗口,如图所示(3)单击OK按钮即可编写命令消息处理代码,代码编辑器中将显示消息处理函数,如图3-22所示。(4)运行程序时,当用户单击菜单项时,将执行其命令消息处理函数。在使用类向导为菜单添加命令处理函数时,发现菜单除了COMMAND消息外,还有一个UPD
5、ATE_COMMAND_UI消息,该消息是“更新命令用户接口消息”。菜单项的状态维护就依赖于UPDATE_COMMAND_UI消息。下面就来看看如何使用这个消息。其具体操作步骤如下。(1)打开一个基于单文档的应用程序,运行程序后发现“编辑”菜单下的菜单项都不可用,如图所示。3.1.3菜单项的更新机制(2)如果要使“编辑”菜单下的菜单项都可用,就要为相应的菜单项处理UPDATE_COMMAND_UI消息,以“撤销”菜单项为例,打开类向导,选择MessageMaps选项卡,在Classname下拉列表中选择CMainFrame类;在ObjectIds列表框中选择
6、“撤销”菜单项ID_EDIT_UNDO;在Message列表框中选择UPDATE_COMMAND_UI项,如图所示。(3)单击AddFunction…按钮即可创建该消息的处理函数。(4)单击EditCode按钮即可定位到新建的消息处理函数,在函数中添加代码使“撤销”菜单项可用。代码如下:voidCMainFrame::OnUpdateEditUndo(CCmdUI*pCmdUI){pCmdUI->Enable();//使菜单项可用}(5)运行程序,效果如图3-25所示。在MFC中,CMenu类封装了Windows的菜单功能,它提供了多个方法用于创建、修改、合
7、并菜单。CMenu类的主要方法如下。(1)Attach方法Attach方法用于将句柄关联到菜单对象上。返回值为非零,表示执行成功,否则执行失败。BOOLAttach(HMENUhMenu);hMenu:标识菜单句柄。如果用户获得了某个菜单句柄,可以通过该方法将其与菜单对象关联,这样,就可以使用菜单对象操作菜单资源了。例如:CMenumenu;//定义菜单对象HMENUhMenu=::GetMenu(m_hWnd);//获取一个菜单句柄menu.Attach(hMenu);//将菜单句柄关联到菜单对象上menu.GetSubMenu(0)->ModifyMen
8、u(0,MF_BYPOSITION,0,"修改菜单"
此文档下载收益归作者所有