资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,5,章菜单、工具栏和状态栏,主讲:吕骏,2,菜单,菜单是应用程序中常用的用于交互操作的界面工具之一,它能够将一个应用程序的功能有效地按类组织,并以列表的方式显示出来,方便用户操作。,常见的菜单可分为三类:主菜单、弹出菜单和快捷菜单,1.,主菜单,指出现在应用程序主窗口或最上层窗口的菜单。通常对应有一个弹出菜单作为它的子菜单。,主菜单的,PopUp,属性为,True,,主菜单只有显示弹出菜单的能力,没有执行的能力(没有,ID,,不能添加事件处理函数),2.,弹出菜单,指选择主菜单或一个菜单项时弹出的子菜单。,3.,快捷菜单,当右击某个界面对象时,通常会弹出快捷菜单,它出现在鼠标箭头的位置,快速展示当前对象可用的命令功能。,3,4,主菜单,弹出菜单,快捷菜单,菜单项,对于菜单的显示都遵循下列一些规则:,若点击某菜单项会弹出一对话框,那么在该菜单项文本后有,“,”,。,若某项菜单有子菜单,那么在该菜单项文本后有,“,”,。,菜单项需要助记符,用括号将带下划线的字母括起来。助记符与,Alt,构成一个组合键,当按住,“,Alt,”,键不放,再敲击该字母时,对应的菜单项就会被选中。,若某项菜单需要快捷键的支持,则一般将其列在相应菜单项文本之后。任何时候按下快捷键,相应的菜单命令都会被执行。,创建菜单,在系统自动生成的菜单资源中添加一个主菜单命令,IDR_MAINFRAME,菜单是,MFC AppWizard,的单文档应用程序自动创建的一个默认的主菜单。,双击该菜单资源名称,可以打开菜单编辑器。,在菜单编辑器中,为程序添加自己的菜单命令,7,菜单属性,标题,是否被选中,是否为灰色,是否可选,是否弹出子菜单,ID,标号,提示信息,是否为分割线,ID(,菜单命令的,ID),ID_,顶层菜单名,_,下一级菜单名,(_,再下一级菜单名,),Caption (,菜单命令的名称,),快捷键设置,在菜单标题中相应的字母前输入“,&,”即可。还可以加上菜单项的加速键“,tCtrl+C,”,,可以再不打开菜单的情况下直接执行菜单命令,“,t,”为制表符。,Separator(,分隔线,),:该项值为,True,,则菜单命令变成一个分隔线,而原有菜单命令信息丢失。如想对菜单命令分组,可以使用分隔线。,Popup(,弹出式,),。该项值为,True,,菜单命令将成为弹出式菜单,即单击次菜单会掏出下一级菜单。弹出式菜单不需要制定,ID,号。,VS2010,默认顶层菜单为弹出式菜单。,Inactive(,不活动,),。该项值为,True,表明菜单命令的初始状态为非活动状态。,Checked(,检查标记,),。该项用来给菜单一个初始的检查标记,其值为,True,,则会在菜单命令的左侧打上一个勾。,Grayed(,变灰,),。该项值为,True,,则该菜单命令将以灰色显示,表明菜单的初始状态为不可访问。如果该项值为,True,,那么菜单一定不是活动的,此时“,Inactive”,项不可用。,Help(,帮助形式,),。该项值为,True,,则该菜单会显示在菜单栏的有侧。,Break(,菜单命令的分隔,),。当一个菜单的菜单命令太多时,放在一列中会感觉很长,很拥挤,这时可以考虑把它分成两列来显示。有三种选择方式:,None, Column, Bar,Prompt(,菜单命令功能的提示,),。程序运行时,当鼠标指针移到菜单命令上时,在底部的状态栏会给出此菜单的功能提示,编辑菜单过程中所涉及的操作,插入菜单项,选中空白区域,输入菜单项标题,并设置属性。,调整菜单项位置,选中某菜单项将其拖至适当位置。,删除菜单项,用鼠标单击菜单项,然后单击,Cut,按钮或按,Del,键删除。,11,菜单设计一般需要经过下面两步:,使用菜单编辑器编辑菜单资源;,右键点击菜单项,-,添加事件处理函数。,【,例,】,在一个单文档应用程序中添加一个“画图”主菜单,为其添加具有“直线”和“矩形”两个菜单项弹出菜单。,建单文档应用程序,MyMenu,打开菜单编辑器,编辑菜单项,打开“资源视图”中“,Menu”,文件夹,双击,IDR_MAINFRAME,打开菜单编辑器。,运行程序,13,菜单的响应和消息路由,菜单命令也是一种消息,在,Windows,中,消息分为三类:标准消息、命令消息和通告消息。,标准消息是除,WM_COMMAND,之外,所有以,WM_,开头的消息。从,CWnd,派生的类都可以接收到这类消息。,命令消息是来自菜单、加速键或工具栏按钮的消息。这类消息都以,WM_COMMAND,形式呈现。在程序中,通过资源的标识(,ID,)来区分来自资源的命令消息。从,CCmdTarget,派生的类,都可以接收到这类消息。,通告消息是由控件产生的消息,例如按钮的单击、列表框的选择等都会产生这类消息,目的是为了向其父窗口(通常是对话框)通知事件的发生。这类消息也是以,WM_COMMAND,形式呈现的。从,CCmdTarget,派生的类,都可以接收到这类消息。,14,为添加的菜单添加消息响应,并编辑处理函数,使用户在选择每个菜单项时,弹出不同的提示对话框。,在上例中仅添加了菜单,并没有实现菜单的功能,即没有对应的命令处理函数与菜单项对应,因此,添加的菜单项是灰色的,即处于当前不可用状态。,添加新的菜单项后,还应该为菜单项指定一个处理函数,添加一个消息处理函数。,15,步骤如下:,打开,MyMenu,应用程序,建立,WM_COMMAND,命令消息映射,1.,在“直线”菜单项上单击鼠标右键,选择“添加事件处理程序”,弹出“事件处理程序向导”对话框。,2.,在“类列表”中选择要添加响应函数的类“,CMainFrame”,,在“消息类型”中选择“,COMMAND”,,单击“添加编辑”按钮,即为“直线”菜单项在“,CMainFrame”,类中添加了一个,WM_COMMAND,类型的消息处理函数“,OnLine”,。,编辑消息处理函数。,在,void CMainFrame:OnLine(),函数中添加代码,MessageBox(_T(,您选择了画直线的操作!,);,16,同样的方法可以添加矩形的消息响应函数。,运行界面如下:,17,消息映射从代码上来看,对应着,3,个部分的代码:,在响应这个菜单命令的类的声明中添加一个响应函数的声明,afx_msg void OnLine();,在该类的实现文件中,在这个类的消息映射表中添加这个菜单的映射宏,ON_COMMAND(ID_LINE, &CMainFrame:OnLine),在该类的实现文件中,为响应函数添加实际的响应代,void CMainFrame:OnLine(),MessageBox(_T(,您选择了画直线的操作!,);,因此,也可以不使用类向导,自己添加上述三部分代码,完成同样的功能。,18,加速键,用于实现对快捷键的设置。,19,为程序,MyMenu,中添加的两个菜单项添加加速键。,打开加速键列表,在“资源视图”中双击 “,Accelerator”,文件夹下的“,IDR_MAINFRAME”,,打开加速键列表。,编辑加速键资源,三个菜单的加速键资源如图所示。,当按下键盘上的“,Alt+Shift+L”,和“,Alt+Shift+R”,时,就相当于选择了“画图”子菜单下的“直线”和“矩形”菜单项。,这与在编辑菜单项名称时所写的“,&+,字母”是不同的,它代表的含义是,当这个弹出菜单显示时,按下“,Alt+,字母”,即选中该菜单项,当这个弹出菜单没有显示时,按这个组合键是无效的,这样的组合键通常被称为热键。,21,MFC,中的,CMenu,类封装了,Windows,的菜单功能,提供了对菜单和菜单项的多种操作。,与,CMenu,类相关的主要函数如下:,1.,获取菜单指针,CMenu * CWnd:GetMenu() const,;,功能:得到主菜单的指针,CMenu * CMenu:GetSubMenu( int nPos)const,;,nPos,:指定菜单项的位置,,第一个菜单项为,0,,第二个菜单项为,1,,以此类推。,功能:得到第,nPos+1,个菜单项的弹出菜单的指针。,2.,添加菜单项,获取了菜单指针后,可以调用,AppendMenu,或,InsertMenu,函数在程序运行时添加菜单项。,BOOL CMenu:AppendMenu(UINT nFlags, UINT nIDNewItem=0, LPCTSTR lpszNewItem=NULL),;,BOOL CMenu:InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem=0, LPCTSTR lpszNewItem=NULL),;,nFlags,常用的两种风格为:,MF_POPUP(,添加主菜单项,),和,MF_STRING,(添加弹出菜单项)。,注意:当菜单项增加后,应调用,CWnd:DrawMenuBar( ),来更新菜单。,23,3.,删除菜单项,BOOL CMenu:DeleteMenu(UINT nPosition, UINT nFlags),;,nPosition,:标识要删除的菜单项;,24,注意事项:当删除菜单项后,应调用,CWnd:DrawMenuBar( ),来更新菜单。,符号,含义,nPosition,值,MF_BYCOMMAND,菜单项以,ID,号来标识,菜单项资源,ID,MF_BYPOSITION,菜单项以位置来标识,菜单项位置,DedeteMenu,的,nFlags,标志及其对其他值的影响,4.,获取菜单项数目,UINT,CMenu:,GetMenuItemCount,( ),const;,获取菜单项数目失败时,函数返回值为,-1,。,5.,获取菜单,ID,号,UINT Cmenu:GetMenuItemID( int nPos) const,;,GetMenuItemID( ),方法根据菜单项的位置返回菜单,ID,,如果该菜单项对应一个弹出菜单,则返回值为,-1,,如果该菜单项是一个分隔条,则返回值为,0,。,nPos,:标识菜单项的位置,第一个菜单项为,0,。,25,6.,对菜单项属性的修改,void CCmdUI:SetCheck( int nCheck1=1),;,设定菜单项是否被选中,,nCheck1=1,为选中,,0,为未选中。,void CCmdUI:Enable( BOOL bOn=TRUE);,设定菜单项是否可选,,bOn=1,为可选,,0,为不可选(呈灰色),26,7.,显示快捷菜单,BOOL CMenu:TrackPopupMenu(UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect=NULL);,nFlags,:表示菜单在屏幕显示的位置以及鼠标按钮标志,.,x,:菜单的水平坐标;,y,:菜单的垂直坐标;,pWnd,:标识显示快捷菜单的窗口,此窗口将收到此快捷菜单全部的,WM_COMMAND,消息;,lpRect,:一个,RECT,结构或,CRect,对象指针,表示一个矩形区域,用户单击这个区域时,快捷菜单不消失。当,lpRect,为,NULL,时,表示用户单击在菜单外面时,菜单会立即消失。,一般情况下,菜单项都不止一种状态。,例如,在没有选择任何内容时,,Edit,菜单下的,Copy,、,Cut,等菜单项是无效的,(,灰色显示,),。有时,我们还会看到,在菜单项旁边可能还会有检查标记,表示它是选中的还是不选中的。,MFC,通过消息映射机制和,CCmdUI,类更新菜单项的显示。,28,为,菜单项添加消息响应函数时,如果选择一个菜单,ID,,在,Messages,列表框中就会出现以下两项:,COMMAND,UPDATE_COMMAND_UI,其中,UPDATE_COMMAND_UI,是更新命令用户接口消息,专门用于处理菜单项和,工具条按钮的更新。,CCmdUI,的成员,函数:,29,成员函数,功能,Enable(),设置菜单项是否有效,SetCheck(),增加或清除” ”标记,为程序添加更新用户界面的消息处理函数,使得用户在选择某一菜单项后,为此菜单项添加复选标记,同时设置为无效状态,表示不可再选此项。,记录用户当前选择的菜单项,在,CMainFrame,类中添加一个成员变量,int type;,在类的初始化函数中赋初值为,0,,即,type=0;,在,OnLine( ),函数中将其设置为,1,,即,type=1;,在,OnRectangle( ),函数中将其设置为,2,,即,type=2;,建立菜单的,ON_UPDATA_COMMAND_UI,消息映射,30,为菜单的消息处理函数添加代码,void CMainFrame:OnUpdateLine(CCmdUI *pCmdUI),pCmdUI-SetCheck(0);,if(type=1),pCmdUI-SetCheck(1);,pCmdUI-Enable(FALSE);,31,运行程序,选择矩形菜单,点击了弹出对话框的“确定”按钮,再单击“画图”菜单项的状态,32,我们平时在使用程序时,经常会用到单击鼠标右键显示的快捷菜单,也称为上下文菜单,或右键菜单。,显示快捷菜单需要使用,CMenu:TrackPopupMenu(),函数,CMenu:TrackPopupMenu,函数的原型为:,BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect=NULL);,该函数的功能是显示一个右键快捷菜单。其中,,nflags,表示屏幕位置标志。,x,、,y,分别表示菜单的水平坐标和顶端的垂直坐标;,pWnd,表示弹出菜单的窗口,包括全部的,WM_COMMAND,消息;,lpRect,表示一个矩形域,当单击这个矩形域时菜单不消失。,33,34,参数,nflags,的含义,为程序添加一个快捷菜单,显示“画图”菜单对应的弹出菜单,添加菜单资源,在项目工作区窗口中选择“资源视图”,在“,Menu”,项目上单击鼠标右键,选择“插入,Menu”,,向应用程序添加一个新的菜单资源,缺省的,ID,号为,IDR_MENU1,,编辑菜单。为该菜单资源中的顶层菜单的第一项加一任意标题,(,实际上该标题无用,),,在此菜单项下依次添加菜单项设置 “直线”和“矩形”菜单项的,ID,与,IDR_MAINFRAME,中相应的菜单相同,也可以在,ID,的下拉列表框中,分别选择“,ID_LINE”,和“,ID_RECTANGLE”,。,35,建立消息映射,编辑响应函数,快捷菜单通常都不涉及这样的操作,因为快捷菜单中显示的菜单项在程序的主菜单中都可以找到,只要在第一步中,将快捷菜单中菜单项的,ID,选为主菜单中相应菜单项的,ID,即可,这样就将快捷菜单中的菜单项就与主菜单中相应的菜单项关联到同一响应函数了。,在,CVIEW,类中加入,WM_CONTEXTMENU,消息的处理函数,选择“,Cview”,类的“消息窗口”,建立“,WM_CONTEXTMENU”,消息的响应函数“,OnContextMenu”,。,36,编辑,WM_CONTEXTMENU,消息处理函数,编辑,OnContextMenu,函数如下,因为函数中要用到参数,point,,故要去掉其注释:,CMenu menu;,menu.LoadMenuW(IDR_MENU1); menu.GetSubMenu(0)- TrackPopupMenu(,TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,AfxGetMainWnd(),);,37,38,运行程序,界面如下,编程方法给系统菜单添加一个菜单项,例,向应用系统菜单中添加一个菜单项。,(1),打开一个单文档应用程序项目,若没有可按前面提及的方法进行创建。,(2),选择资源中的,String Table,。,(3),单击,New,,在,Name,框中,可以指定一个用于菜单项的,ID,号,输入“,ID_NEW_MENUITEM,”。在,Value,框中,可以定义该,ID,的值,选择默认的,ID,值,101,,单击,OK,按钮,caption,输入“新建菜单项”。,String Table,也称为串表,,用于实现对字符串资源的,ID,和,Caption,等的设置。,40,(4),在,CMainFrame:OnCreate,函数体,(,或自定义的函数,),中加入代码:,.,CMenu* pSysMenu = GetMenu();/,获得主菜单句柄,CMenu* pSubMenu = pSysMenu-GetSubMenu(1);,/,获得第二个子菜单的句柄,CString StrMenuItem(,新的菜单项,);,pSubMenu-AppendMenu(MF_SEPARATOR);,/,增加一水平分隔线,pSubMenu-AppendMenu(MF_STRING,ID_NEW_MENUITEM,StrMenuItem);,/,允许使用,ON_UPDATE_COMMAND_UI,或,ON_COMMAND,的菜单项,m_bAutoMenuEnable = FALSE;,/,使添加的菜单处于允 许状态,默认为灰显,pSysMenu-EnableMenuItem(ID_NEW_MENUITEM,MF_BYCOMMAND|MF_ENABLED);,DrawMenuBar();/,更新菜单,return 0;,(5),使用,ClassWizard,处理,OnCommand,消息并检测用户菜单的,nID,参数。(在虚函数中找),BOOL CMainFrame:OnCommand(WPARAM wParam, LPARAM lParam),/ wParam,的低字节表示菜单、控件、加速键的命令,ID,if (LOWORD(wParam) = ID_NEW_MENUITEM),MessageBox(_T(,你选中了新的菜单项,“);,return true; CFrameWnd:OnCommand(wParam, lParam);,从第四章可知,利用,MFC,向导可以生成基于对话框的应用程序,利用向导生成的对话框应用程序是没有菜单的,虽然我们也可以为应用程序添加菜单资源,但编辑好的菜单资源在程序运行时并不显示。这时只要打开该对话框的“属性”页,将“,Menu”,属性值设置为所添加的菜单资源的,ID,即可。,43,通常步骤:,在资源视图中,右键点击,.rc,文件(资源文件),选择,Add Resource,,选择,Menu,新建一个菜单。,添加相关的菜单项及属性设置。,在主对话框属性中,Menu,属性中添加新建的菜单,ID,。,为菜单项添加在主对话框类的消息响应函数。,44,例建立一个基于对话框的应用程序,为程序的对话框添加菜单资源,所添加的菜单是在前面练习过的有两个菜单项的“画图”菜单,每个菜单项的功能也同前。,建立基于对话框的应用程序,MyDialogMenu,编辑菜单资源,IDM_MENU1,将菜单与对话框相关联,45,添加菜单,ID,建立菜单项的消息映射,编辑消息处理函数,46,工具栏,在,MFC,中,工具栏的功能由类,CToolBar,实现。工具栏资源和工具栏类,CToolBar,是工具栏的两个要素。创建工具栏的方法有两种:,使用,ResourceView,视图中自带的工具栏进行创建。,添加自定义工具栏,47,工具栏概述,系统默认生成的工具栏资源为,IDR_MAINFRAME_256,,可以在此基础上设计自己的工具栏,删除或添加一些按钮。需要为工具栏按钮提供,ID,号,一般取某个菜单项的,ID,。,编程时,菜单、快捷键、工具栏资源往往配合使用。具有相同,ID,号的菜单项、工具栏按钮、快捷键被用户操作后,会产生相同的命令消息,只需要进行一次消息映射。,工具栏的基本操作,添加按钮,双击工具条上的空白按钮或单击空白按钮后,绘制新的按钮。,删除按钮,将按钮拖出工具栏外,即可删除该按钮。,移动按钮,鼠标选中按钮,按住鼠标不动,移动到指定位置上,松开鼠标。,需要注意的是,按,Delete,键并不能删除该按钮,只是将其中的图形以背景色填充。,在工具栏中插入空格,49,工具栏按钮属性的设置。,50,项目,含义,ID,工具栏按钮的标识符,可以从,ID,框的下拉列表中选区标识符名称,Width,工具栏按钮的像素宽度,Height,工具栏按钮的像素高度,Prompt,工具栏按钮提示信息。若为,“,建立新文档,n,新建,”,,则表示当鼠标指向该按钮时,在状态栏中显示,“,建立新文档,”,,而在弹出的提示信息中出现,“,新建,”,例打开单文档应用程序,MyMenu,,为其添加工具栏按钮。具体步骤如下:,打开单文档应用程序,MyMenu,编辑工具栏资源,编辑“直线”和“矩形”菜单项对应的工具栏按钮,将工具栏按钮的,ID,与菜单项的,ID,分别对应。,51,工具栏的操作,52,编辑工具栏,使用工具栏编辑器来编辑工具栏资源。双击,ResourceView,视图中的,Toolbar,工具栏资源,即可打开工具栏编辑器。,绘图编辑器,颜色选择,属性,状态栏,状态栏实际上是一个窗口,一般分为几个窗格,每个窗格显示不同的信息。,状态栏可以分为两部分,其中左边最长的那部分称为提示行,当我们把鼠标移动到某个菜单项或工具按钮上时,该部分将显示相应的提示信息。,53,用,AppWizard,创建的,SDI,或,MDI,应用程序框架中,有一个静态的,indicator,数组,它是在,MainFrm.cpp,文件中定义的,被,MFC,用作状态栏的定义。,Static UINT indicators=,ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,状态栏的常用操作,增加,和减少窗格,状态栏,中的窗格可以分为信息行窗格和指示器窗格两类。若在状态栏中增加一个信息行窗格,则只需在,indicators,数组中的适当位置中增加一个,ID_SEPARATOR,标识;若在状态栏中增加一个用户指示器窗格,则在,indicators,数组中的适当位置增加一个在字符串表中定义过的资源,ID,,其字符串的长度表示用户指示器窗格的大小。若状态栏减少一个窗格,其操作与增加相类似,只需减少,indicators,数组元素。,在状态栏上显示文本,有三种办法可以在状态栏窗格显示文本信息:,(1),调用,CWnd:SetWindowText,更新信息行窗格,(,或窗格,0),中的文本。由于状态栏也是一种窗口,故在使用时可直接调用。若状态栏变量为,m_wndStatusBar,,则,m_wndStatusBar. SetWindowText(,“,消息,”,),语句将在信息行窗格,(,或窗格,0),内显示,“,消息,”,字样。,(2),手动处理状态栏的,ON_UPDATE_COMMAND_UI,更新消息,并在处理函数中调用,CCmdUI:SetText,函数。,(3),调用,CStatusBar:SetPaneText,函数更新任何窗格,(,包括信息行窗格,),中的文本。此函数原型描述如下:,BOOL SetPaneText( int,nIndex, LPCTSTR,lpszNewText, BOOL,bUpdate =,TRUE );,例在状态栏的最右边两个窗格中显示出当前鼠标在窗口客户区的位置。,(1),将前面的单文档应用程序打开或重新创建;,(2),将项目工作区窗口切换到,ResourceView,页面,双击,“,String Table,”,项的,“,String Table,”,图标。在字符串列表的最后一行空项上双击鼠标左键,如图:,(3),该对话框中,可以指定相应的,ID,和字符串值,这里加入两个字符串资源,ID_LEFT,和,ID_RIGHT,,其字符的多少决定窗格的大小。如图:,添加的字符串,图,6.18,添加的字符串资源,(4),打开,MainFrm.cpp,文件,将原先的,indicators,数组修改如下:,static UINT indicators =,ID_SEPARATOR, /,第一个信息行窗格,ID_SEPARATOR, /,第二个信息行窗格,ID_LEFT,/,第三个窗格,ID_RIGHT,/,第四个窗格,;,(5),必须手工添加消息处理函数原型。打开,mymenuView.h,文件,在,AFX_MSG,内增加消息处理语句,,ClassWizard,以后允许访问和编辑该代码。,protected:,/AFX_MSG(CEx_SdiView),afx_msg void OnUpdateXY(CCmdUI* pCmdUI);,/AFX_MSG,DECLARE_MESSAGE_MAP(),(6),打开,mymenuView.cpp,文件,在其消息入口处添加消息映射函数:,BEGIN_MESSAGE_MAP(CEx_SdiView, CView),/AFX_MSG_MAP(CEx_SdiView),ON_UPDATE_COMMAND_UI(ID_LEFT, OnUpdateXY),ON_UPDATE_COMMAND_UI(ID_RIGHT, OnUpdateXY),/AFX_MSG_MAP,(7),增加修改状态栏指示器的消息映射函数代码,状态栏的窗格需要更新时,应用程序框架自动调用此函数。,void CmymenuView:OnUpdateXY(CCmdUI* pCmdUI),pCmdUI-Enable(TRUE);/,使窗格文本能被更新,(8),用,ClassWizard,在,CmymenuView,中加入,WM_MOUSEMOVE(,鼠标移动,),消息处理函数,并添加下列代码。该函数先获得状态栏对象的指针,然后调用,SetPaneText,函数更新第三和第四窗格中的文本。,CString str;,CMainFrame*pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd;,CMFCStatusBar* pStatus=if (pStatus),str.Format(_T(X=%d“),point.x);,/,格式化文本,pStatus-SetPaneText(2,str);,str.Format(_T(Y=%d“),point.y);,pStatus-SetPaneText(3,str);,(9),将,MainFrm.h,文件中的受保护变量,m_wndStatusBar,变成公共变量。,(10),在,mymenuView.cpp,文件的开始处增加下列语句:,#include,“,MainFrm.h,”,(11),编译并运行。,改变状态栏的风格,在,MFC,的,CMFCStatusBar,类中,有两个成员函数可以改变状态栏风格,它们是:,void SetPaneInfo( int,nIndex, UINT,nID, UINT,nStyle, int,cxWidth,);,void SetPaneStyle( int,nIndex, UINT,nStyle,);,参数,nIndex,表示要设置的状态栏窗格的索引,,nID,用来为状态栏窗格指定新的,ID,,,cxWidth,表示窗格的像素宽度,,nStyle,表示窗格的风格类型,用来指定窗格的外观,例如,SBPS_POPOUT,表示窗格是凸起来的,见表。,ICON,与位图相似,用于存放系统中用到的所有的图标。,63,当选择,Image-NewItemType,时,将跳出对图标属性的设置。,版本信息,用于设置和显示软件的相关版本信息。,65,可修改某些项或者添加,删除一些已知项。,
展开阅读全文