菜单、工具栏和状态栏.ppt

上传人:牧羊曲112 文档编号:6142987 上传时间:2023-09-28 格式:PPT 页数:33 大小:344.50KB
返回 下载 相关 举报
菜单、工具栏和状态栏.ppt_第1页
第1页 / 共33页
菜单、工具栏和状态栏.ppt_第2页
第2页 / 共33页
菜单、工具栏和状态栏.ppt_第3页
第3页 / 共33页
菜单、工具栏和状态栏.ppt_第4页
第4页 / 共33页
菜单、工具栏和状态栏.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《菜单、工具栏和状态栏.ppt》由会员分享,可在线阅读,更多相关《菜单、工具栏和状态栏.ppt(33页珍藏版)》请在三一办公上搜索。

1、1,第6章菜单、工具栏和状态栏,6.1 菜单 6.2 工具栏 6.3 状态栏,2,第6章菜单、工具栏和状态栏,6.1 菜单 6.2 工具栏 6.3 状态栏,3,6.1菜单(1 of 11),对于菜单的显示都遵循下列一些规则:若某菜单项标题后有“”,那么在点击某菜单项会弹出一对话框。若某项菜单有子菜单,那么在该菜单项文本后有“”。菜单项需要助记符,用括号将带下划线的字母括起来。助记符与Alt构成一个组合键,当按住“Alt”键不放,再敲击该字母时,对应的菜单项就会被选中。若某项菜单需要快捷键的支持,则一般将其列在相应菜单项文本之后。任何时候按下快捷键,相应的菜单命令都会被执行。,图6.1 File

2、菜单,4,6.1菜单(2 of 11),6.1.1 用编辑器设计菜单 编辑菜单 在菜单的空位置上双击鼠标左键,则出现它的属性对话框,如图。,图6.3 菜单属性对话框,5,6.1菜单(3 of 11),6,6.1菜单(4 of 11),需要注意的是:当菜单项的属性中选中了Pop_up(该菜单包含子菜单)时,对话框中ID、Separator和Prompt项无效。增加新的菜单项后,用户可以用鼠标将菜单项拖到其他位置,而当菜单项位置改变时,其属性并不改变。,图6.5 添加的菜单项,7,6.1菜单(5 of 11),菜单命令的消息映射 例Ex_Mmenu“成绩输入”菜单项的映射。(1)进入MFC Cla

3、ssWizard对话框,切换到Message Maps页面。(2)从“Class name”列表中选择CMainFrame,在IDs列表中选择ID_SCORE_IN,然后在Messages框中选择COMMAND消息,如图。,图6.6 消息的选择,8,6.1菜单(6 of 11),(3)单击Add Function按钮或双击COMMAND消息,输入成员函数的名称。如图6.7所示。(4)单击OK。选择新增加的成员函数,单击Edit Code按钮(或直接在函数名双击鼠标左键),就可以在此成员函数中添加一些代码。例如:void CMainFrame:OnScoreIn()/TODO:Add your

4、command handler code hereAfxMessageBox(现在就输入成绩吗?);(5)编译并运行。在应用程序的顶层菜单上,单击“成绩输入”菜单项或按Alt+S组合键,如图6.8所示。,图6.7 添加成员函数对话框,图6.8 菜单命令执行的结果,9,6.1菜单(7 of 11),6.1.2 使用键盘快捷键(1)先打开上例的项目工作区窗口中Accelerator的资源项,双击IDR_MAINFRAME,如图。,10,6.1菜单(8 of 11),(2)要建立一新的加速键,双击加速键列表的最下端的空行,如图6.10,其中可设置的属性如表6.2。(3)在上述对话框中,选择ID_SC

5、ORE_IN作为要设定快捷键的ID号,单击Next Key Typed,按下Ctrl+1作为此加速键的键值。,图6.10“Accel Properities”对话框,11,6.1菜单(9 of 11),6.1.3 使用快捷菜单右键菜单用资源编辑器和MFC库的CMenu:TrackPopupMenu函数可以创建快捷菜单。CMenu:TrackPopupMenu函数原型如下:BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd*pWnd,LPCRECT lpRect=NULL);其中:x和y表示菜单顶端(一般为左上角)的水平坐标和垂直坐标。pWnd表示弹

6、出菜单的窗口。lpRect是一个RECT结构或CRect对象指针,表示一个矩形区域,不在该区域单击鼠标时,则弹出菜单消失;当lpRect为NULL时,若击在菜单外面,菜单立刻消失。,12,6.1菜单(10 of 11),例Ex_Menu创建弹出菜单。(1)选择“Insert”菜单“Resource”命令,为应用程序添加一个新的菜单资源。(2)用菜单编辑器,为该菜单资源中的顶层菜单的第一项加一任意标题(实际上该标题无任何作用),在此菜单项下依次添加如下表所示的菜单项。(3)将此菜单资源ID号改为IDR_MYFLOATMENU(默认的ID号为 IDR_MENU1)。(4)按Ctrl+W快捷键打开C

7、lassWizard,将出现一对话框,询问是“选择一个已存在的类”,还是“创建一个新类”。选择“选择一个已存在的类”项并选定CMainFrame类。,13,6.1菜单(11 of 11),(5)在CMainFrame类中,选择上表中所列的菜单ID,双击COMMAND消息。这里仅为菜单ID_MENU_SCOREIN映射COMMAND消息,添加代码:void CMainFrame:OnMenuScorein()AfxMessageBox(现在就输入成绩吗?);(6)在CMainFrame类加入WM_CONTEXTMENU消息处理函数,代码如下:void CMainFrame:OnContextMe

8、nu(CWnd*pWnd,CPoint point)CMenu menu;menu.LoadMenu(IDR_MYFLOATMENU);menu.GetSubMenu(0)-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);(7)运行并测试。在应用程序的窗口客户区中单击鼠标右键,弹出如图菜单。“成绩打印”菜单命令没有消息处理函数,因此它是灰显的,用户不能使用它们。若用户选中“成绩输入”菜单命令,则会执行相应的代码。,图6.13 快捷菜单,14,第6章菜单、工具栏和状态栏,6.1 菜单 6.2 工具栏 6.3 状

9、态栏,15,6.2工具栏(1 of 6),6.2.1 使用工具栏编辑器 例:选择“File”“Open Workspace”,创建单文档应用程序Ex_Sdi。在项目工作区窗口中选择ResourceView标签,双击“Toolbar”项中的IDR_MAINFRAME,则工具栏编辑器出现在主界面的右边,如图。,16,6.2工具栏(2 of 6),可以对工具栏进行的操作:(1)创建一个新的工具栏按钮在新建的工具栏中,最右端总有一个空按钮,双击该按钮弹出其属性对话框,在ID框中输入其标识符名称。单击该按钮,在编辑器的视窗内进行编辑,这个编辑就是绘制一个按钮位图。(2)移动一个按钮在工具栏中移动一个按钮

10、,用鼠标左键点中它并拖动至相应位置即可。若在移动一个按钮的同时,按下Ctrl键,则在新位置复制一个按钮。(3)删除一个按钮如果用户拖动它离开工具栏位置,则此按钮从工具栏中消失(被删除)。但若选中按钮后,单击Delete键并不能删除一个按钮,只是将按钮中的图形全部以背景色填充。,17,6.2工具栏(3 of 6),可以对工具栏进行的操作:(4)在按钮之间插入/删除空格如果按钮左侧没有空格,拖动该按钮向右移动并当覆盖相邻按钮的一半以上时,释放鼠标键,则此按钮左侧出现空格。如果按钮左侧有空格而按钮右侧没有空格,拖动该按钮向左移动并当按钮的左边界接触到前面按钮时,释放鼠标键,则此按钮右侧将出现空格。如

11、果按钮左、右两侧均有空格,拖动该按钮向右移动并当接触到相邻按钮时,则此按钮左侧的空格保留,按钮右侧的空格消失。相反,拖动该按钮向左移动并当接触到前一个相邻按钮时,则此按钮左侧的空格消失,右侧的空格保留。,18,6.2工具栏(4 of 6),可以对工具栏进行的操作:(5)设置工具栏按钮的属性双击某工具按钮,就会弹出其属性对话框,如下图所示。,图6.15 工具栏按钮属性对话框,19,6.2工具栏(5 of 6),6.2.2 工具栏和菜单相结合 例Ex_T&M 将菜单项ID_SCORE_IN与工具按钮相结合。(1)在单文档应用程序Ex_Sid中,作如下操作;(2)利用工具栏编辑器设计一个工具按钮,如

12、图;(3)双击刚才设计的钮工具按钮图形,弹出该工具按钮的属性对话框;在属性对话框中,将工具按钮的ID号设为ID_SCORE_IN,在Prompt框内键入“向系统输入学生成绩n成绩输入”;,图6.16 工具栏按钮的设计,20,6.2工具栏(6 of 6),6.2.2 工具栏和菜单相结合 例Ex_T&M 将菜单项ID_SCORE_IN与工具按钮相结合。(4)编译并运行程序。在应用程序的工具栏上,将鼠标指针移至刚才设计的工具按钮处,这时在状态栏上显示出“向系统输入学生成绩”信息,若稍等片刻后,还会弹出提示小窗口,显示出“成绩输入”字样。,21,第6章菜单、工具栏和状态栏,6.1 菜单 6.2 工具栏

13、 6.3 状态栏,22,6.3状态栏(1 of 9),6.3.1 状态栏的定义 用AppWizard创建的SDI或MDI应用程序框架中,有一个静态的indicators数组,这个数组中的元素通常都是一些字符串资源的ID号,它是在MainFrm.cpp文件中被定义的,被MFC用作状态栏的定义。默认的indicators数组包含4个元素,如下图所示:,23,6.3状态栏(2 of 9),6.3.2 状态栏的常用操作增加和减少窗格状态栏中的窗格可以分为信息行窗格和指示器窗格两类。若在状态栏中增加一个信息行窗格,则在indicators数组中的适当位置中增加一个ID_SEPARATOR标识即可;若在状

14、态栏中增加一个指示器窗格,则在indicators数组中的适当位置增加一个在字符串资源中定义过的资源ID号即可;若在状态栏中减少一个信息行或者指示器窗格,其操作与增加类似,只需减少一个对应的数组元素即可。,24,6.3状态栏(3 of 9),6.3.2 状态栏的常用操作在状态栏上显示文本有三种办法可以在状态栏窗格显示文本信息:(1)调用CWnd:SetWindowText更新信息行窗格(或窗格0)中的文本。若状态栏变量为m_wndStatusBar,则m_wndStatusBar.SetWindowText(“消息”)语句将在第一个信息行窗格内显示“消息”字样。,25,6.3状态栏(3 of

15、9),6.3.2 状态栏的常用操作在状态栏上显示文本有三种办法可以在状态栏窗格显示文本信息:(2)手动处理状态栏的ON_UPDATE_COMMAND_UI更新消息,并在处理函数中调用CCmdUI:SetText函数。,26,6.3状态栏(3 of 9),6.3.2 状态栏的常用操作在状态栏上显示文本有三种办法可以在状态栏窗格显示文本信息:(3)调用CStatusBar:SetPaneText函数更新任何窗格(包括信息行窗格)中的文本。此函数原型描述如下:BOOL SetPaneText(int nIndex,LPCTSTR lpszNewText,BOOL bUpdate=TRUE);其中:n

16、Index表示设置的窗格的索引(第一个窗格的索引为0);lpszNewText表示要显示的字符串;bUpdate为TRUE表示系统自动更新显示的结果。,27,6.3状态栏(4 of 9),例Ex_Status 在状态栏的最右边两个窗格中显示出当前鼠标在窗口客户区的位置。(1)将前面的单文档应用程序Ex_Sdi打开或者新建一个单文档应用程序;(2)将项目工作区窗口切换到ResourceView页面,双击“String Table”项的“String Table”图标。在字符串列表的最后一行空项上双击鼠标左键,如图6.17所示。(3)该对话框中,可以指定相应的ID和字符串值,这里加入两个字符串资源

17、ID_LEFT和ID_RIGHT,其字符个数的多少决定窗格的大小。如图6.18。,图6.17 字符串属性对话框,28,6.3状态栏(5 of 9),(4)打开MainFrm.cpp文件,将原先的indicators数组修改如下:static UINT indicators=ID_SEPARATOR,/第一个信息行窗格ID_SEPARATOR,/第二个信息行窗格ID_LEFT,/第三个窗格ID_RIGHT,/第四个窗格;(5)必须手动添加消息处理函数原型。打开Ex_SdiView.h文件,在AFX_MSG内增加消息处理语句,ClassWizard以后允许访问和编辑该代码。protected:/A

18、FX_MSG(CEx_SdiView)afx_msg void OnUpdateXY(CCmdUI*pCmdUI);/AFX_MSGDECLARE_MESSAGE_MAP(),29,6.3状态栏(6 of 9),(6)打开Ex_SdiView.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

19、,30,6.3状态栏(7 of 9),(7)增加修改状态栏指示器的消息映射函数代码,状态栏的窗格需要更新时,应用程序框架自动调用此函数。void CEx_SdiView:OnUpdateXY(CCmdUI*pCmdUI)pCmdUI-Enable(TRUE);/使窗格文本能被更新,31,6.3状态栏(8 of 9),(8)用ClassWizard在CEx_SdiView类中加入WM_MOUSEMOVE(鼠标移动)消息处理函数,并添加下列代码。该函数先获得状态栏对象的指针,然后调用SetPaneText函数更新第三和第四窗格中的文本。void CEx_SdiView:OnMouseMove(UINT nFlags,CPoint point)CString str;CMainFrame*pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd;CStatusBar*pStatus=,32,6.3状态栏(9 of 9),(9)将MainFrm.h文件中的受保护变量m_wndStatusBar变成公有变量。(10)在Ex_SdiView.cpp文件的开始处增加下列语句:#include“MainFrm.h”(11)编译并运行,如图。,33,第6章菜单、工具栏和状态栏,6.1 菜单 6.2 工具栏 6.3 状态栏,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号