第4章-菜单工具栏与状态栏.ppt
- 文档编号:18627857
- 上传时间:2023-08-21
- 格式:PPT
- 页数:51
- 大小:686KB
第4章-菜单工具栏与状态栏.ppt
《第4章-菜单工具栏与状态栏.ppt》由会员分享,可在线阅读,更多相关《第4章-菜单工具栏与状态栏.ppt(51页珍藏版)》请在冰点文库上搜索。
第4章菜单、工具栏与状态栏,VisualC+程序设计与应用教程,4.1菜单4.2工具栏4.3状态栏4.4应用实例,2,4.1菜单,4.1.1菜单的类型常见菜单有3种:
主菜单、弹出菜单和快捷菜单。
1.主菜单指出现在应用程序主窗口或最上层窗口的菜单。
通常对应有一个弹出菜单作为它的子菜单。
3,2.弹出菜单指选择主菜单或一个菜单项时弹出的子菜单。
3.快捷菜单当右击某个界面对象时,通常会弹出快捷菜单,它出现在鼠标箭头的位置,快速展示当前对象可用的命令功能。
4,菜单结构,房间号,0123,楼层号,0,1,5,菜单设计一般需要经过下面两步:
(1)使用菜单编辑器编辑菜单资源;
(2)使用ClassWizard进行消息映射,编辑成员函数,完成菜单所要实现的功能。
6,4.1.2编辑菜单使用菜单编辑器来编辑菜单资源。
双击ResourceView视图中的Menu菜单资源,打开菜单编辑器。
7,1.插入新菜单项在当前空白菜单项位置插入选定窗口中的空白菜单项后按回车键(或双击空白菜单项),系统弹出菜单属性对话框。
在某菜单项前插入选中该菜单项并按Ins键,再双击该空白菜单项进行编辑。
8,2.属性对话框的设置用于输入菜单项的标识符(ID)、标题(Caption)和菜单项在状态栏上显示的提示(Prompt)信息等。
菜单项的标识符(ID),菜单项在状态栏上显示的提示信息,标题,9,10,10,3.调整菜单项位置选中某菜单项将其拖至适当位置。
4.删除菜单项用鼠标单击菜单项或用上、下、左、右光标键选择菜单项,然后单击Cut按钮或按Del键删除。
11,11,【例4.1】编写一个单文档应用程序MyDraw,在菜单栏中增加一个“绘图”主菜单,并在其中添加“矩形”和“椭圆”两个菜单项。
12,12,4.1.3建立消息映射在上例中仅添加了菜单,并没有实现菜单的功能,即没有对应的命令处理函数与菜单项对应,因此,添加的菜单项是灰色的,即处于当前不可用状态。
添加新的菜单项后,还应该为菜单项指定一个处理函数,即利用ClassWizard类向导添加一个消息处理函数。
13,13,【例4.2】为例4.1中增加的菜单项添加消息处理函数。
程序的实现步骤,1、利用AppWizard生成程序框架(MenuTest)2、编辑资源3、加入菜单消息处理函数4、菜单命令的更新控制,步骤1生成程序框架(MenuTest),项目名称:
MenuTest选择单文档界面应用程序(Singledocument),步骤2编辑资源,1.编辑菜单资源画图Pop-up选中CaptionIDPrompt矩形(&R)tCtrl+RID_DRAW_RECT在视图中画矩形椭圆(&C)tAlt+CID_DRAW_CIRCLE在视图中画椭圆2.编辑快捷键资源IDModifiersKeyID_DRAW_RECTCtrlRID_DRAW_CIRCLAltC,步骤3加入菜单消息处理函数,ClassNameObjectsIDsMessagesCMenuTestViewID_DRAW_RECTCOMMANDCMenuTestViewID_DRAW_CIRCLECOMMAND,voidCMenuTestView:
OnDrawRect()CClientDCdc(this);dc.Rectangle(50,50,200,150);,voidCMenuTestView:
OnDrawCircle()CClientDCdc(this);dc.Ellipse(250,50,400,150);,18,18,4.1.4菜单的有效控制一般情况下,菜单项都不止一种状态。
例如,在没有选择任何内容时,Edit菜单下的Copy、Cut等菜单项是无效的(灰色显示)。
有时,我们还会看到,在菜单项旁边可能还会有检查标记,表示它是选中的还是不选中的。
比如,在Word的视图菜单项下,当用户选用【网格线】或【标尺】时,相应菜单项前会出现一个“”。
MFC通过消息映射机制和CCmdUI类更新菜单项的显示。
19,19,在类向导ClassWizard的MessageMap标签中,如果选择一个菜单ID,在Messages列表框中就会出现以下两项:
COMMANDUPDATE_COMMAND_UI其中UPDATE_COMMAND_UI是更新命令用户接口消息,专门用于处理菜单项和工具条按钮的更新。
基本知识,1、pCmdUI-Enable(true|false);说明:
使用户界面对象有效或无效2、pCmdUI-SetCheck(1|0);说明:
设置或取消选中用户界面对象3、使用COMMAND消息响应菜单项的选择事件4、UPDATE_COMMAND_UI消息控制菜单项使用状态,21,21,【例4.3】为例4.2的程序MyDraw添加更新用户界面的消息处理函数,使程序启动时菜单项【椭圆】处于不可用状态,当用户单击【矩形】菜单项后,在菜单项前显示“”标记,并使【椭圆】菜单项变为可用。
22,22,操作步骤:
1、首先创建菜单项;2、添加菜单命令;3、定义标记变量;public:
boolm;booln;boolf;,23,23,4、赋初值CLi4_3View:
CLi4_3View()/TODO:
addconstructioncodeherem=false;n=false;f=false;,24,24,5、菜单项“椭圆”不可用voidCLi4_3View:
OnUpdatecircle(CCmdUI*pCmdUI)pCmdUI-Enable(m);pCmdUI-SetCheck(f);,25,25,6、单击“矩形”,矩形被选中,同时“椭圆”菜单被激活voidCLi4_3View:
Onrect()m=true;n=true;f=false;CClientDCdc(this);dc.Rectangle(100,100,200,200);,26,26,voidCLi4_3View:
OnUpdaterect(CCmdUI*pCmdUI)pCmdUI-SetCheck(n);/TODO:
AddyourcommandupdateUIhandlercodehere,27,27,7、单击“椭圆”,菜单项单击标记显示voidCLi4_3View:
Oncircle()n=false;f=true;CClientDCdc(this);dc.Ellipse(10,10,100,100);,28,28,4.1.5快捷菜单为应用程序创建快捷菜单主要有以下两种方法。
1.使用ComponentGallery创建快捷菜单ComponentGallery(组件画廊)是一个组件库,它保存着可以共享或重用的代码。
这些代码包括由VisualC+自带的组件和从用户工程中增加到Gallery中去的用户自定义组件。
29,29,【例4.4】为例4.3中的应用程序MyDraw增加一个快捷菜单。
程序运行后,用户在视图窗口中右击,弹出一个快捷菜单,显示主菜单“绘图”下的所有菜单项。
快捷菜单,30,30,
(1)选择Project|addToProject,单击ComponentsandControls子菜单项,弹出对话框,双击对话框中的VisualC+Components文件夹
(2)选择对话框列表中的Pop-upMenu项,单击Insert按钮,在弹出的提示对话框中单击OK(3)编辑快捷菜单。
31,31,2.使用TrackPopupMenu()函数创建快捷菜单CMenu:
TrackPopupMenu函数的原型为:
BOOLTrackPopupMenu(UINTnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=NULL);该函数的功能是显示一个右键快捷菜单。
nflags表示屏幕位置标志(见下表)。
x、y分别表示菜单的水平坐标和顶端的垂直坐标;pWnd表示弹出菜单的窗口,包括全部的WM_COMMAND消息;lpRect表示一个矩形域,当单击这个矩形域时菜单不消失。
32,32,参数nflags的含义,33,33,【例4.5】使用TrackPopupMenu()函数创建例4.3中的快捷菜单。
34,34,voidCmymenuView:
OnContextMenu(CWnd*pWnd,CPointpoint)CWnd*pParent=GetParent();/获得指向视图窗口父窗口(框架窗口)的指针;CMenu*pMenu=pParent-GetMenu();/获得指向顶层菜单的指针;CMenu*pSubMenu=pMenu-GetSubMenu(0);/获得文件菜单指针;pSubMenu-TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this);,35,35,4.2工具栏,在MFC中,工具栏的功能由类CToolBar实现。
工具栏资源和工具栏类CToolBar是工具栏的两个要素。
创建工具栏的基本步骤是:
l创建工具栏资源;l构建一个CToolBar对象;l调用CToolBar:
Create()或CreateEx()函数创建工具栏窗口;l调用CToolBar:
LoadToolBar载入工具栏资源。
36,36,4.2.1编辑工具栏使用工具栏编辑器来编辑工具栏资源。
双击ResourceView视图中的Toolbar工具栏资源,即可打开工具栏编辑器。
37,37,1.添加按钮双击工具条上的空白按钮或单击空白按钮后,选择【View|Properties】菜单项,弹出如图所示的ToolbarButtonProperties属性对话框,在此对话框中编辑按钮的标识符、宽度与高度值。
38,38,2.删除按钮将按钮拖出工具栏外,即可删除该按钮。
3.编辑按钮位图设置按钮位图有以下两种方法。
l利用绘图工具与调色板直接进行绘制l先利用专用绘图软件制作,然后粘贴到按钮上,39,39,4.2.2建立消息映射通常,只需让一个按钮的ID值与同样功能菜单项的ID值相同即可。
如果按钮没有对应菜单项,则必须利用ClassWizard类向导添加一个消息处理函数。
40,40,【例4.8】编写一个单文档应用程序Li4_8。
删除默认工具栏上的【打印设置】按钮,并在【帮助】按钮前添加【上一页】和【下一页】2个按钮,当用户单击这两个按钮后,视图中分别显示文本“这是上一页按钮!
”和“这是下一页按钮!
”。
41,41,4.3状态栏,状态栏实际上是一个窗口,一般分为几个窗格,每个窗格显示不同的信息。
使用AppWizard创建的单文档应用程序,接受默认选项时,生成的应用程序自动创建带有默认窗格的状态栏。
42,42,4.3.1状态栏类的继承关系在MFC中,状态栏的功能由CStatusBar类实现。
43,43,4.3.2状态栏类的成员函数,44,44,4.3.3状态栏操作,利用MFCAppWizard向导创建应用程序时,首先在CMainFrame类中定义一个成员变量m_wndStatusBar,它是状态栏类CStatusBar的对象。
其次在MFC应用程序框架的实现文件MainFrm.cpp中,为状态栏定义一个静态数组indicators,如下所示:
staticUINTindicators=ID_SEPARATOR,/显示命令功能提示ID_INDICATOR_CAPS,/显示大写锁定键状态ID_INDICATOR_NUM,/显示数字锁定键状态ID_INDICATOR_SCRL,/显示滚动锁定键状态;,45,45,46,46,这个全局的提示符数组indicators中的每个元素代表状态栏上一个窗格的ID值,这些ID在应用程序的串表资源StringTable中进行了说明。
通过增加新的ID标识来增加用于显示状态信息的窗格。
状态栏显示的内容由数组indicators决定,需要在状态栏中显示的各窗格的标识符、位置以及个数也由该数组决定,状态栏显示的内容是可以修改的。
47,47,一个应用程序只有一个状态栏,所以对状态栏的操作主要是对状态栏上窗格的操作。
为了把一个窗格添加到默认的状态栏中,一般要完成下列步骤:
(1)为新建窗格创建一个命令ID和默认字符串;
(2)将该窗格的命令ID添加到状态栏的静态数组indicators中;(3)为该窗格创建一个命令更新处理程序。
步骤:
(1)应用AppWizard向导创建一个单文档应用程序Li4_10。
(2)选择FileView视图,打开MainFrm.cpp文件,在状态栏的静态数组indicators的第一项后面添加ID-CLOCK,为状态栏添加窗格,用来存放系统时间。
48,48,【例4.10】编写一个单文档应用程序Li4_10。
程序运行后,在状态栏中显示系统时间。
49,49,(3)在ResourseView视图中,打开串表编辑器。
编辑ID属性和Caption属性。
在Caption中设置输出格式00:
00:
00.(4)在CMainFrame类的OnCreate中添加代码:
intCMainFrame:
OnCreate(LPCREATESTRUCTlpCreateStruct).SetTimer(1,1000,NULL);return0;,50,50,(5)添加WM_TIMER消息处理函数voidCMainFrame:
OnTimer(UINTnIDEvent)CTimetime;time=CTime:
GetCurrentTime();CStrings=time.Format(%H:
%M:
%S);m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_CLOCK),s,true);CFrameWnd:
OnTimer(nIDEvent);,51,51,(6)添加_CLOSER消息处理函数,voidCMainFrame:
OnClose()KillTimer
(1);CFrameWnd:
OnClose();,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 菜单 工具栏 状态栏