收藏 分享(赏)

c语言-菜单工具栏与状态栏.ppt

上传人:hwpkd79526 文档编号:9120519 上传时间:2019-07-24 格式:PPT 页数:57 大小:825KB
下载 相关 举报
c语言-菜单工具栏与状态栏.ppt_第1页
第1页 / 共57页
c语言-菜单工具栏与状态栏.ppt_第2页
第2页 / 共57页
c语言-菜单工具栏与状态栏.ppt_第3页
第3页 / 共57页
c语言-菜单工具栏与状态栏.ppt_第4页
第4页 / 共57页
c语言-菜单工具栏与状态栏.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

1、第 6 章 菜单、工具栏与状态栏,6.1 菜单 6.2 工具栏 6.3 状态栏,2,6.1 菜单,6.1.1 菜单的类型常见菜单有3种:主菜单、弹出菜单和快捷菜单。 1.主菜单指出现在应用程序主窗口或最上层窗口的菜单。通常对应有一个弹出菜单作为它的子菜单。,3,2.弹出菜单指选择主菜单或一个菜单项时弹出的子菜单。 3.快捷菜单当右击某个界面对象时,通常会弹出快捷菜单,它出现在鼠标箭头的位置,快速展示当前对象可用的命令功能。,4,菜单设计一般需要经过下面两步: (1) 使用菜单编辑器编辑菜单资源; (2) 使用ClassWizard进行消息映射,编辑成员函数,完成菜单所要实现的功能。,5,6.1

2、.2 编辑菜单使用菜单编辑器来编辑菜单资源。双击ResourceView视图中的Menu菜单资源,打开菜单编辑器。,6,1.插入新菜单项 在当前空白菜单项位置插入选定窗口中的空白菜单项后按回车键(或双击空白菜单项),系统弹出菜单属性对话框。 在某菜单项前插入选中该菜单项并按Ins键,再双击该空白菜单项进行编辑。,7,2.属性对话框的设置用于输入菜单项的标识符(ID)、标题(Caption)和菜单项在状态栏上显示的提示(Prompt)信息等。,菜单项的标识符(ID),菜单项在状态栏上显示的提示信息,标题,8,9,3.调整菜单项位置选中某菜单项将其拖至适当位置。 4.删除菜单项用鼠标单击菜单项或用

3、上、下、左、右光标键选择菜单项,然后单击Cut按钮或按Del键删除。,10,【例6.1】编写一个单文档应用程序MyDraw,在菜单栏中增加一个“绘图”主菜单,并在其中添加“矩形”和“椭圆”两个菜单项。 (1)利用MFC AppWizardexe向导生成一个项目名为MyDraw的单文档应用程序。 (2)增加 “绘图”主菜单。打开ResourceView视图中的Menu文件夹,双击IDR_MAINFRAME打开菜单编辑器。双击菜单栏右侧的虚线空白菜单项,弹出菜单项属性对话框,在Caption栏中输入“绘图(&D)”。其他采用系统默认值。,11,双击打开菜单编辑器,双击打开菜单项属性对话框,菜单项名

4、称,&表示在字母D下加下划线,12,(3) 为主菜单增加菜单项右击“绘图”菜单项下的虚线空白菜单项,在弹出的快捷菜单中选择Properties,打开菜单项属性设置对话框。在ID栏中输入ID_RECTANGLE,Caption栏中输入“矩形(&R)tCtrl+R”,Prompt栏中输入“在视图中绘制矩形n矩形”。用同样的方法添加“椭圆”子菜单项,它的ID、Caption和Prompt分别为ID_ELLIPSE、椭圆(&L)tCtrl+L、在视图中绘制椭圆n椭圆,并在“矩形”和“椭圆”两个菜单项之间添加一条分隔线。,13,“矩形”菜单的快捷键,此处仅起提示作用,要真正成为快捷键还需要使用快捷键编辑

5、器进行设置,14,(4) 为菜单项添加快捷键。打开ResourceView视图中的Accelerator文件夹,双击IDR_MAINFRAME打开快捷键编辑器。双击编辑器底部的空白框,打开Accel Properties对话框,在ID栏下拉列表中选择ID_RECTANGLE,在Key编辑框中输入R,右边单选按钮接受默认值,关闭对话框。用同样的方法为“椭圆”菜单项定义快捷键。如图所示,,15,16,(5) 编译、链接并运行程序。,菜单项为灰色不可用,17,6.1.3 建立消息映射在上例中仅添加了菜单,并没有实现菜单的功能,即没有对应的命令处理函数与菜单项对应,因此,添加的菜单项是灰色的,即处于当

6、前不可用状态。添加新的菜单项后,还应该为菜单项指定一个处理函数,即利用ClassWizard类向导添加一个消息处理函数。,18,【例6.2】为例6.1中增加的菜单项添加消息处理函数。 (1)打开例6.1中所创建的应用程序MyDraw。 (2)单击【View | ClassWizard】菜单项或按Ctrl+W键启动ClassWizard类向导。 (3)为“矩形”及“椭圆”菜单项添加消息处理函数。在ClassWizard对话框的Class name栏下拉列表中选择CMyDrawView,在Object IDs栏中选择ID_RECTANGLE,在Messages栏选择COMMAND,单击Add Fu

7、nction按钮,接受系统默认函数名。单击Edit Code按钮,为消息处理函数添加如下代码。,19,void CMyDrawView:OnRectangle() / TODO: Add your command handler code hereCClientDC dc(this);dc.Rectangle(10,10,200,100);/绘制矩形 用同样的方法为“椭圆”菜单项添加消息处理函数,并编写如下代码。 void CMyDrawView:OnEllipse() / TODO: Add your command handler code hereCClientDC dc(this);d

8、c.Ellipse(250,100,450,250); ,20,(4) 编译、链接并运行程序,分别选择“矩形”和“椭圆”菜单项,结果如图所示。,21,6.1.4 快捷菜单为应用程序创建快捷菜单主要有以下两种方法。,1.使用Component Gallery创建快捷菜单Component Gallery(组件画廊)是一个组件库,它保存着可以共享或重用的代码。这些代码包括由Visual C+自带的组件和从用户工程中增加到Gallery中去的用户自定义组件。,22,【例6.3】 为例6.2中的应用程序MyDraw增加一个快捷菜单。程序运行后,用户在视图窗口中右击,弹出一个快捷菜单,显示主菜单“绘图”

9、下的所有菜单项。,快捷菜单,23,(1)打开例6.2中的项目MyDraw。 (2)选择【Project|Add To Project】菜单项,单击【Components and Controls】子菜单项,弹出Components and Controls Gallery对话框,如图所示。,24,双击打开对话框中的Visual C+ Components文件夹,如图所示。,25,(3)选择对话框列表中的Pop-up Menu项,单击Insert按钮,在弹出的提示对话框中单击OK按钮,弹出Pop-up Menu对话框,如图所示。在Pop-up Menu对话框的Add pop-up menu to

10、:下拉列表中选择CMyDrawView,即将创建的快捷菜单与视图类相关联。接受默认的菜单ID值。单击OK按钮,插入快捷菜单。,26,(4) 编辑快捷菜单。展开ResourceView视图中的Menu文件夹,双击新的菜单资源CG_IDR_POPUP_MY_DRAW_VIEW,打开菜单资源编辑器,删除菜单POPUP下的默认菜单项。,27,28,打开IDR_MAINFRAME菜单资源,将主菜单“绘图”的所有下拉菜单项复制到剪贴板上。返回到新菜单资源编辑器,将复制的内容粘贴到新的快捷菜单上。这样快捷菜单就具有了与“绘图”主菜单完全相同的功能。,29,主菜单“绘图”的所有子菜单,30,(5) 为快捷菜单

11、连接一个类。将鼠标移到新的快捷菜单上,右击选择ClassWizard菜单项,打开ClassWizard窗口,并弹出Adding a Class对话框,如下图所示。,选择Select an existing class项,单击OK按钮,在弹出的Select Class对话框类列表中选择CMyDrawView,单击Select按钮。,(6) 编译、链接并运行程序。,31,2.使用TrackPopupMenu( )函数创建快捷菜单使用菜单资源编辑器和CMenu:TrackPopupMenu( )函数来创建右键快捷菜单。 CMenu:TrackPopupMenu函数的原型为: BOOL TrackPo

12、pupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect=NULL); 该函数的功能是显示一个右键快捷菜单。其中,nflags表示屏幕位置标志(见下表)。x、y分别表示菜单的水平坐标和顶端的垂直坐标;pWnd表示弹出菜单的窗口,包括全部的WM_COMMAND消息;lpRect表示一个矩形域,当单击这个矩形域时菜单不消失。,32,参数nflags的含义,33,【例6.4】 使用TrackPopupMenu( )函数创建例6.3中的快捷菜单。 (1) 打开例6.2中的项目MyDraw。 (2) 选择【Insert|Resource】菜单项,

13、向应用程序中添加一个新的菜单资源,并将新菜单的ID改为IDR_POPUP。双击ResourceView视图中Menu文件夹下的IDR_MAINFRAME,打开标准菜单编辑器,单击【绘图】菜单项并复制。双击新菜单资源IDR_POPUP,打开快捷菜单编辑器,单击空白菜单项并粘贴。 (3)用例6.3中步骤(5)的方法为快捷菜单连接类CMyDrawView。,34,(4) 加载并显示快捷菜单。打开ClassWizard对话框,在Class name栏和Object IDs下拉列表中均选择CMyDrawView,在Messages中选择WM_CONTEXTMENU,单击Add Function按钮,再单

14、击Edit Code,在打开的WM_CONTEXTMENU消息处理函数中添加如下代码。,35,36,(5)编译、链接并运行程序,得到与例6.3中相同的效果。,37,6.2 工具栏,在MFC中,工具栏的功能由类CToolBar实现。工具栏资源和工具栏类CToolBar是工具栏的两个要素。创建工具栏的基本步骤是: l 创建工具栏资源; l 构建一个CToolBar对象; l 调用CToolBar:Create( )或CreateEx( )函数创建工具栏窗口; l 调用CToolBar:LoadToolBar载入工具栏资源。,38,6.2.1 编辑工具栏使用工具栏编辑器来编辑工具栏资源。双击Reso

15、urceView视图中的Toolbar工具栏资源,即可打开工具栏编辑器。,39,1.添加按钮双击工具条上的空白按钮或单击空白按钮后,选择【View|Properties】菜单项,弹出如图所示的Toolbar Button Properties属性对话框,在此对话框中编辑按钮的标识符、宽度与高度值。,40,2.删除按钮将按钮拖出工具栏外,即可删除该按钮。 3.编辑按钮位图 设置按钮位图有以下两种方法。 l 利用绘图工具与调色板直接进行绘制 l 先利用专用绘图软件制作,然后粘贴到按钮上,41,6.2.2 建立消息映射通常,只需让一个按钮的ID值与同样功能菜单项的ID值相同即可。如果按钮没有对应菜单

16、项,则必须利用ClassWizard类向导添加一个消息处理函数。,42,【例6.5】创建一个单文档的应用程序。为该应用程序添加二个按钮到工具条中,单击第一个按钮,在视图窗口中显示“打开文件”对话框;单击第二个按钮,视图窗口中会弹出一消息框,在其中显示自己的名字。,43,(1) 使用MFC AppWizardexe向导创建一个单文档应用程序Li6_5,然后打开工具栏资源编辑器。 (2)用鼠标单击工具栏最后的空白框,用绘图工具及调色板制作【O】按钮。双击工具栏中刚绘制的新按钮,打开其属性设置对话框,在ID栏中选择ID_FILE_OPEN。用同样的方法定义一个【T】按钮,设置其ID为ID_TEXT。

17、,44,由于第一个新按钮与系统提供的文件|打开菜单项相对应,因此,不需要为它添加消息处理函数。 (3) 为第二个新按钮添加消息处理函数。打开ClassWizard对话框,选择Message Maps选项卡,在Class name栏中选择CLi6_5View,在Object IDs下拉列表中选择ID_TEXT,在Messages栏中选择COMMAND,单击Add Function按钮,再单击Edit Code,在函数中添加代码。,45,void CLi6_5View:OnText() CClientDC dc(this);dc.TextOut(50,50,“学生姓名“); (5) 编译、链接并运

18、行程序。,46,6.3 状态栏,状态栏实际上是一个窗口,一般分为几个窗格,每个窗格显示不同的信息。使用AppWizard创建的单文档应用程序,接受默认选项时,生成的应用程序自动创建带有默认窗格的状态栏。,47,6.3.1 状态栏类的继承关系在MFC中,状态栏的功能由CStatusBar类实现。,48,6.3.2 状态栏类的成员函数,49,6.3.3 状态栏操作,利用MFC AppWizard向导创建应用程序时,首先在CMainFrame类中定义一个成员变量m_wndStatusBar,它是状态栏类CStatusBar的对象。其次在MFC应用程序框架的实现文件MainFrm.cpp中,为状态栏定

19、义一个静态数组indicators,如下所示: static UINT indicators = ID_SEPARATOR, /显示命令功能提示ID_INDICATOR_CAPS, /显示大写锁定键状态ID_INDICATOR_NUM, /显示数字锁定键状态ID_INDICATOR_SCRL, /显示滚动锁定键状态 ;,50,这个全局的提示符数组indicators中的每个元素代表状态栏上一个窗格的ID值,这些ID在应用程序的串表资源String Table中进行了说明。通过增加新的ID标识来增加用于显示状态信息的窗格。状态栏显示的内容由数组indicators决定,需要在状态栏中显示的各窗格

20、的标识符、位置以及个数也由该数组决定,状态栏显示的内容是可以修改的。,51,最后CWnd:Create( )函数以主框架窗口为父窗口创建状态栏,创建后默认停靠在主框架窗口的底部。CWnd:SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)函数将创建后的状态栏分隔为sizeof(indicators)/sizeof(UINT)个窗格,窗格的ID分别为indicators数组中的元素值。,52,一个应用程序只有一个状态栏,所以对状态栏的操作主要是对状态栏上窗格的操作。为了把一个窗格添加到默认的状态栏中,一般要完成下列步骤: l为新建窗格

21、创建一个命令ID和默认字符串; l将该窗格的命令ID添加到状态栏的静态数组indicators中; l为该窗格创建一个命令更新处理程序。,53,【例6.6】编写一个单文档应用程序Li6_6。程序运行后,在状态栏中显示系统时间。 (1) 启动Visual C+,使用MFC AppWizardexe向导创建一个单文档应用程序Li6_6。 (2) 选择项目工作区的FileView视图,打开MainFrm.cpp文件。在状态栏的静态数组indicators的第一项后面添加ID_INDICATOR_CLOCK,为状态增加一个窗格,用来显示系统时间。 (3) 选择项目工作区的ResourceView视图,

22、打开串表编辑器。双击串表编辑器中的空白框,在弹出的字符串属性设置对话框的ID栏中输入ID_INDICATOR_CLOCK,在Caption栏中输入00:00:00,定义窗格中数据输出格式及长度。,54,(4) 在CMainFrame类的OnCreate( )函数中添加如下代码。 int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) SetTimer(1,1000,NULL);return 0; 函数CWnd:SetTimer()用来安装一个计时器,它的第一个参数指定计时ID为1,第二个参数指定计时器的时间间隔为1000毫秒。这样,每隔1秒

23、OnTimer()函数就会被调用一次。,55,(5)利用ClassWizard类向导给CMainFrame类添加WM_TIMER和WM_CLOSER消息处理函数OnTimer()和OnClose(),并添加代码。 void CMainFrame:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultCTime time;time=CTime:GetCurrentTime();/获得系统时间/将系统时间转换成时:分:秒格式的字符串CString s=time.Format(“%H:%M:%S“); /更新时间窗格显示的时间内容 m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex( ID_INDICATOR_CLOCK),s);CFrameWnd:OnTimer(nIDEvent); ,56,void CMainFrame:OnClose() / TODO: Add your message handler code here and/or call defaultKillTimer(1);/关闭计时器CFrameWnd:OnClose(); (6) 编译、链接并运行程序。结果如图所示。,57,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报