![第6章菜单工具栏和状态栏ppt课件_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/d32197ee-db7f-4537-94f4-b0183df49cd1/d32197ee-db7f-4537-94f4-b0183df49cd11.gif)
![第6章菜单工具栏和状态栏ppt课件_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/d32197ee-db7f-4537-94f4-b0183df49cd1/d32197ee-db7f-4537-94f4-b0183df49cd12.gif)
![第6章菜单工具栏和状态栏ppt课件_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/d32197ee-db7f-4537-94f4-b0183df49cd1/d32197ee-db7f-4537-94f4-b0183df49cd13.gif)
![第6章菜单工具栏和状态栏ppt课件_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/d32197ee-db7f-4537-94f4-b0183df49cd1/d32197ee-db7f-4537-94f4-b0183df49cd14.gif)
![第6章菜单工具栏和状态栏ppt课件_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/d32197ee-db7f-4537-94f4-b0183df49cd1/d32197ee-db7f-4537-94f4-b0183df49cd15.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6章菜单、工具栏和状态栏章菜单、工具栏和状态栏 6.1 菜单菜单 6.2 工具栏工具栏 6.3 状态栏状态栏 第第6章菜单、工具栏和状态栏章菜单、工具栏和状态栏 6.1 菜单菜单 6.2 工具栏工具栏 6.3 状态栏状态栏 6.1菜单菜单 (1 of 11) 对于菜单的显示都遵循下列一些规则:对于菜单的显示都遵循下列一些规则:若某菜单项标题后有若某菜单项标题后有“”,那么在点,那么在点击某菜单项会弹出一对话框。击某菜单项会弹出一对话框。若某项菜单有子菜单,那么在该菜单项若某项菜单有子菜单,那么在该菜单项文本后有文本后有“”。菜单项需要助记符,用括号将带下划线菜单项需要助记符,用括号将带下划
2、线的字母括起来。助记符与的字母括起来。助记符与Alt构成一构成一个组合键,当按住个组合键,当按住“Alt键不放,键不放,再敲击该字母时,对应的菜单项就会再敲击该字母时,对应的菜单项就会被选中。被选中。若某项菜单需要快捷键的支持,则一般若某项菜单需要快捷键的支持,则一般将其列在相应菜单项文本之后。任何将其列在相应菜单项文本之后。任何时候按下快捷键,相应的菜单命令都时候按下快捷键,相应的菜单命令都会被执行。会被执行。 图图6.1 File菜单菜单 6.1菜单菜单 (2 of 11) 6.1.1 用编辑器设计菜单用编辑器设计菜单 编辑菜单编辑菜单 在菜单的空位置上双击鼠标左键,则出现它的属在菜单的空
3、位置上双击鼠标左键,则出现它的属性对话框,如图。性对话框,如图。 图图6.2 菜单编辑器菜单编辑器菜单的空位置图图6.3 菜单属性对话框菜单属性对话框6.1菜单菜单 (3 of 11) 6.1菜单菜单 (4 of 11) 需要注意的是:需要注意的是:当菜单项的属性中选中了当菜单项的属性中选中了Pop_up(该菜单包含子菜单该菜单包含子菜单)时,时,对话框中对话框中ID、Separator和和Prompt项无效。项无效。增加新的菜单项后,用户可以用鼠标将菜单项拖到其他位增加新的菜单项后,用户可以用鼠标将菜单项拖到其他位置,而当菜单项位置改变时,其属性并不改变。置,而当菜单项位置改变时,其属性并不
4、改变。 菜单项被拖动的位置图图6.4 拖动菜单项拖动菜单项图图6.5 添加的菜单项添加的菜单项6.1菜单菜单 (5 of 11) 菜单命令的消息映射菜单命令的消息映射 例例Ex_Mmenu “成绩输入菜单项的映射。成绩输入菜单项的映射。(1) 进入进入MFC ClassWizard对话框,切换到对话框,切换到Message Maps页面。页面。(2) 从从“Class name列表中选择列表中选择CMainFrame,在,在IDs列表中选择列表中选择ID_SCORE_IN,然后在,然后在Messages框中选择框中选择COMMAND消息,如图。消息,如图。 图图6.6 消息的选择消息的选择6.
5、1菜单菜单 (6 of 11) (3) 单击Add Function按钮或双击COMMAND消息,输入成员函数的名称。如图6.7所示。(4) 单击OK。选择新增加的成员函数,单击Edit Code按钮(或直接在函数名双击鼠标左键),就可以在此成员函数中添加一些代码。例如:void CMainFrame:OnScoreIn() / TODO: Add your command handler code hereAfxMessageBox(现在就输入成绩吗?);(5)编译并运行。在应用程序的顶层菜单上,单击“成绩输入菜单项或按Alt+S组合键,如图6.8所示。图图6.7 添加成员函数对话框添加成员
6、函数对话框图图6.8 菜单命令执行的结果菜单命令执行的结果6.1菜单菜单 (7 of 11) 6.1.2 使用键盘快捷键使用键盘快捷键 (1) 先打开上例的项目工作区窗口中先打开上例的项目工作区窗口中Accelerator的资源项,的资源项,双击双击IDR_MAINFRAME,如图。,如图。 图图6.9 示例示例Ex_Sdi的加速键资源的加速键资源最下端的空行6.1菜单菜单 (8 of 11) (2) 要建立一新的加速键,双击加速键列表的最下端的空行,如图要建立一新的加速键,双击加速键列表的最下端的空行,如图6.10,其中可设置的属性如表,其中可设置的属性如表6.2。(3) 在上述对话框中,选
7、择在上述对话框中,选择ID_SCORE_IN作为要设定快捷键的作为要设定快捷键的ID号,单击号,单击Next Key Typed,按下,按下Ctrl+1作为此加速键的键值。作为此加速键的键值。 图图6.10 “Accel Properities对话框对话框6.1菜单菜单 (9 of 11) 6.1.3 使用快捷菜单使用快捷菜单右键菜单右键菜单用资源编辑器和用资源编辑器和MFC库的库的CMenu:TrackPopupMenu函数函数可以创建快捷菜单。可以创建快捷菜单。CMenu:TrackPopupMenu函数原型函数原型如下:如下:BOOL TrackPopupMenu( UINT nFlag
8、s, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL ); 其中:其中:x和和y表示菜单顶端表示菜单顶端(一般为左上角一般为左上角)的水平坐标和垂直坐标。的水平坐标和垂直坐标。pWnd表示弹出菜单的窗口。表示弹出菜单的窗口。lpRect是一个是一个RECT结构或结构或CRect对象指针,表示一个矩形对象指针,表示一个矩形区域,不在该区域单击鼠标时,则弹出菜单消失;当区域,不在该区域单击鼠标时,则弹出菜单消失;当lpRect为为NULL时,若击在菜单外面,菜单立刻消失。时,若击在菜单外面,菜单立刻消失。6.1菜单菜单 (10 of 11) 例例Ex
9、_Menu创建弹出菜单。创建弹出菜单。(1) 选择选择“Insert菜单菜单“Resource命令,为应用程序添加一个新的菜单命令,为应用程序添加一个新的菜单资源。资源。(2) 用菜单编辑器,为该菜单资源中的顶层菜单的第一项加一任意标题用菜单编辑器,为该菜单资源中的顶层菜单的第一项加一任意标题(实际实际上该标题无任何作用上该标题无任何作用),在此菜单项下依次添加如下表所示的菜单项。,在此菜单项下依次添加如下表所示的菜单项。(3) 将此菜单资源将此菜单资源ID号改为号改为IDR_MYFLOATMENU (默认的默认的ID号为号为 IDR_MENU1) 。(4) 按按Ctrl+W快捷键打开快捷键打
10、开ClassWizard,将出现一对话框,询问是,将出现一对话框,询问是“选择一选择一个已存在的类个已存在的类”,还是,还是“创建一个新类创建一个新类”。选择。选择“选择一个已存在的类选择一个已存在的类项并选定项并选定CMainFrame类。类。6.1菜单菜单 (11 of 11) (5) 在在CMainFrame类中,选择上表中所列的菜单类中,选择上表中所列的菜单ID,双击,双击COMMAND消息。消息。这里仅为菜单这里仅为菜单ID_MENU_SCOREIN映射映射COMMAND消息,添加代码:消息,添加代码:void CMainFrame:OnMenuScorein() AfxMessag
11、eBox(现在就输入成绩吗?现在就输入成绩吗?); (6) 在在CMainFrame类加入类加入WM_CONTEXTMENU消息处理函数,代码如下:消息处理函数,代码如下:void CMainFrame:OnContextMenu(CWnd* pWnd, CPoint point) CMenu menu;menu.LoadMenu(IDR_MYFLOATMENU);menu.GetSubMenu(0)- TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);(7) 运行并测试。在应用程序的窗口客户区中单击鼠标
12、右键,弹出如图菜单。运行并测试。在应用程序的窗口客户区中单击鼠标右键,弹出如图菜单。 “成绩打印菜单命令没有消息处理函数,因此它是灰显的,用户不能使用成绩打印菜单命令没有消息处理函数,因此它是灰显的,用户不能使用它们。若用户选中它们。若用户选中“成绩输入菜单命令,则会执行相应的代码。成绩输入菜单命令,则会执行相应的代码。 图图6.13 快捷菜单快捷菜单第第6章菜单、工具栏和状态栏章菜单、工具栏和状态栏 6.1 菜单菜单 6.2 工具栏工具栏 6.3 状态栏状态栏 6.2工具栏工具栏 (1 of 6)6.2.1 使用工具栏编辑器使用工具栏编辑器 例:选择例:选择“File”“Open Works
13、pace”,创建单文档应,创建单文档应用程序用程序Ex_Sdi 。在项目工作区窗口中选择。在项目工作区窗口中选择ResourceView标签,双击标签,双击“Toolbar项中的项中的IDR_MAINFRAME,则工具栏编辑器出现在主界面的,则工具栏编辑器出现在主界面的右边,如图。右边,如图。图图6.14 工具栏编辑器窗口工具栏编辑器窗口空按钮空按钮6.2工具栏工具栏 (2 of 6)可以对工具栏进行的操作:可以对工具栏进行的操作: (1) 创建一个新的工具栏按钮创建一个新的工具栏按钮在新建的工具栏中,最右端总有一个空按钮,双击该在新建的工具栏中,最右端总有一个空按钮,双击该按钮弹出其属性对话
14、框,在按钮弹出其属性对话框,在ID框中输入其标识符名称。单框中输入其标识符名称。单击该按钮,在编辑器的视窗内进行编辑,这个编辑就是绘击该按钮,在编辑器的视窗内进行编辑,这个编辑就是绘制一个按钮位图。制一个按钮位图。 (2) 移动一个按钮移动一个按钮在工具栏中移动一个按钮,用鼠标左键点中它并拖动在工具栏中移动一个按钮,用鼠标左键点中它并拖动至相应位置即可。至相应位置即可。 若在移动一个按钮的同时,按下若在移动一个按钮的同时,按下Ctrl键,则在新位置复键,则在新位置复制一个按钮。制一个按钮。 (3) 删除一个按钮删除一个按钮如果用户拖动它离开工具栏位置,则此按钮从工具栏如果用户拖动它离开工具栏位
15、置,则此按钮从工具栏中消失中消失(被删除被删除)。 但若选中按钮后,单击但若选中按钮后,单击Delete键并不能删除一个按钮,键并不能删除一个按钮,只是将按钮中的图形全部以背景色填充。只是将按钮中的图形全部以背景色填充。6.2工具栏工具栏 (3 of 6)可以对工具栏进行的操作:可以对工具栏进行的操作: (4) 在按钮之间插入在按钮之间插入/删除空格删除空格如果按钮左侧没有空格,拖动该按钮向右移动并当覆盖相如果按钮左侧没有空格,拖动该按钮向右移动并当覆盖相邻按钮的一半以上时,释放鼠标键,则此按钮左侧出现空邻按钮的一半以上时,释放鼠标键,则此按钮左侧出现空格。格。如果按钮左侧有空格而按钮右侧没有
16、空格,拖动该按钮向如果按钮左侧有空格而按钮右侧没有空格,拖动该按钮向左移动并当按钮的左边界接触到前面按钮时,释放鼠标键,左移动并当按钮的左边界接触到前面按钮时,释放鼠标键,则此按钮右侧将出现空格。则此按钮右侧将出现空格。如果按钮左、右两侧均有空格,拖动该按钮向右移动并当如果按钮左、右两侧均有空格,拖动该按钮向右移动并当接触到相邻按钮时,则此按钮左侧的空格保留,按钮右侧接触到相邻按钮时,则此按钮左侧的空格保留,按钮右侧的空格消失。相反,拖动该按钮向左移动并当接触到前一的空格消失。相反,拖动该按钮向左移动并当接触到前一个相邻按钮时,则此按钮左侧的空格消失,右侧的空格保个相邻按钮时,则此按钮左侧的空
17、格消失,右侧的空格保留。留。6.2工具栏工具栏 (4 of 6)可以对工具栏进行的操作:可以对工具栏进行的操作: (5) 设置工具栏按钮的属性设置工具栏按钮的属性双击某工具按钮,就会弹出其属性对话框,如下图所示。双击某工具按钮,就会弹出其属性对话框,如下图所示。图图6.15 工具栏按钮属性对话框工具栏按钮属性对话框6.2工具栏工具栏 (5 of 6)6.2.2 工具栏和菜单相结合工具栏和菜单相结合 例例Ex_T&M 将菜单项将菜单项ID_SCORE_IN与工具按钮相与工具按钮相结合。结合。(1) 在单文档应用程序在单文档应用程序Ex_Sid中,作如下操作;中,作如下操作;(2) 利用工
18、具栏编辑器设计一个工具按钮,如图;利用工具栏编辑器设计一个工具按钮,如图;(3) 双击刚才设计的钮工具按钮图形,弹出该工具双击刚才设计的钮工具按钮图形,弹出该工具按钮的属性对话框;在属性对话框中,将工具按钮按钮的属性对话框;在属性对话框中,将工具按钮的的ID号设为号设为ID_SCORE_IN,在,在Prompt框内键入框内键入“向系统输入学生成绩向系统输入学生成绩n成绩输入成绩输入”;图图6.16 工具栏按钮的设计工具栏按钮的设计6.2工具栏工具栏 (6 of 6)6.2.2 工具栏和菜单相结合工具栏和菜单相结合 例例Ex_T&M 将菜单项将菜单项ID_SCORE_IN与工具按钮相与工
19、具按钮相结合。结合。 (4) 编译并运行程序。在应用程序的工具栏上,将编译并运行程序。在应用程序的工具栏上,将鼠标指针移至刚才设计的工具按钮处,这时在状态鼠标指针移至刚才设计的工具按钮处,这时在状态栏上显示出栏上显示出“向系统输入学生成绩信息,若稍等向系统输入学生成绩信息,若稍等片刻后,还会弹出提示小窗口,显示出片刻后,还会弹出提示小窗口,显示出“成绩输入成绩输入字样。字样。第第6章菜单、工具栏和状态栏章菜单、工具栏和状态栏 6.1 菜单菜单 6.2 工具栏工具栏 6.3 状态栏状态栏 6.3状态栏状态栏 (1 of 9) 6.3.1 状态栏的定义状态栏的定义 用用AppWizard创建的创建
20、的SDI或或MDI应用程序应用程序框架中,有一个静态的框架中,有一个静态的indicators数组,数组,这个数组中的元素通常都是一些字符串资这个数组中的元素通常都是一些字符串资源的源的ID号,它是在号,它是在MainFrm.cpp文件中文件中被定义的,被被定义的,被MFC用作状态栏的定义。用作状态栏的定义。默认的默认的indicators数组包含数组包含4个元素,如下个元素,如下图所示:图所示:Static UINT indicators=ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,图图6.17 indi
21、cators数组的定义数组的定义6.3状态栏状态栏 (2 of 9)6.3.2 状态栏的常用操作状态栏的常用操作增加和减少窗格增加和减少窗格状态栏中的窗格可以分为信息行窗格和指状态栏中的窗格可以分为信息行窗格和指示器窗格两类。示器窗格两类。若在状态栏中增加一个信息行窗格,则在若在状态栏中增加一个信息行窗格,则在indicators数组中的适当位置中增加一个数组中的适当位置中增加一个ID_SEPARATOR标识即可;标识即可;若在状态栏中增加一个指示器窗格,则在若在状态栏中增加一个指示器窗格,则在indicators数组中的适当位置增加一个在数组中的适当位置增加一个在字符串资源中定义过的资源字符
22、串资源中定义过的资源ID号即可;号即可;若在状态栏中减少一个信息行或者指示器窗若在状态栏中减少一个信息行或者指示器窗格,其操作与增加类似,只需减少一个对格,其操作与增加类似,只需减少一个对应的数组元素即可。应的数组元素即可。6.3状态栏状态栏 (3 of 9)6.3.2 状态栏的常用操作状态栏的常用操作在状态栏上显示文本在状态栏上显示文本有三种办法可以在状态栏窗格显示文本信有三种办法可以在状态栏窗格显示文本信息:息:(1) 调用调用CWnd:SetWindowText更新信更新信息行窗格息行窗格(或窗格或窗格0)中的文本。中的文本。若状态栏变量为若状态栏变量为m_wndStatusBar,则,
23、则m_wndStatusBar. SetWindowText(“消息消息”)语句将在第一语句将在第一个信息行窗格内显示个信息行窗格内显示“消息字样。消息字样。6.3状态栏状态栏 (3 of 9)6.3.2 状态栏的常用操作状态栏的常用操作在状态栏上显示文本在状态栏上显示文本有三种办法可以在状态栏窗格显示文本信有三种办法可以在状态栏窗格显示文本信息:息:(2) 手动处理状态栏的手动处理状态栏的ON_UPDATE_COMMAND_UI更新消息,更新消息,并在处理函数中调用并在处理函数中调用CCmdUI:SetText函数。函数。6.3状态栏状态栏 (3 of 9)6.3.2 状态栏的常用操作状态栏
24、的常用操作在状态栏上显示文本在状态栏上显示文本有三种办法可以在状态栏窗格显示文本信有三种办法可以在状态栏窗格显示文本信息:息:(3) 调用调用CStatusBar:SetPaneText函数函数更新任何窗格更新任何窗格(包括信息行窗格包括信息行窗格)中的文本。中的文本。此函数原型描述如下:此函数原型描述如下: BOOL SetPaneText( int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE );其中:其中:nIndex表示设置的窗格的索引表示设置的窗格的索引(第一第一个窗格的索引为个窗格的索引为0);lpszNewText表示表示要显
25、示的字符串;要显示的字符串;bUpdate为为TRUE表示表示系统自动更新显示的结果。系统自动更新显示的结果。6.3状态栏状态栏 (4 of 9)例例Ex_Status 在状态栏的最右边两个窗格中显示出当前鼠在状态栏的最右边两个窗格中显示出当前鼠标在窗口客户区的位置。标在窗口客户区的位置。(1) 将前面的单文档应用程序将前面的单文档应用程序Ex_Sdi打开或者新建一个打开或者新建一个单文档应用程序;单文档应用程序;(2) 将项目工作区窗口切换到将项目工作区窗口切换到ResourceView页面,双击页面,双击“String Table项的项的“String Table图标。在字符串列表图标。在
26、字符串列表的最后一行空项上双击鼠标左键,如图的最后一行空项上双击鼠标左键,如图6.17所示。所示。(3) 该对话框中,可以指定相应的该对话框中,可以指定相应的ID和字符串值,这里和字符串值,这里加入两个字符串资源加入两个字符串资源ID_LEFT和和ID_RIGHT,其字符个数,其字符个数的多少决定窗格的大小。如图的多少决定窗格的大小。如图6.18。图图6.17 字符串属性对话框字符串属性对话框添加的添加的字符串字符串图图6.18 添加的字符串资源添加的字符串资源6.3状态栏状态栏 (5 of 9)(4) 打开MainFrm.cpp文件,将原先的indicators数组修改如下:static U
27、INT indicators =ID_SEPARATOR, / 第一个信息行窗格ID_SEPARATOR, / 第二个信息行窗格ID_LEFT,/ 第三个窗格ID_RIGHT,/ 第四个窗格;(5) 必须手动添加消息处理函数原型。打开Ex_SdiView.h文件,在AFX_MSG内增加消息处理语句,ClassWizard以后允许访问和编辑该代码。protected:/AFX_MSG(CEx_SdiView)afx_msg void OnUpdateXY(CCmdUI* pCmdUI);/AFX_MSGDECLARE_MESSAGE_MAP()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_MAP6.3状态栏状态栏 (7 of 9)(7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球离网房车行业调研及趋势分析报告
- 2025-2030全球高脉冲能量皮秒激光器行业调研及趋势分析报告
- 月龄婴儿情绪情感与社会性亲子活动设计创造性抚触游戏讲解
- 2025【合同范本】建筑工程设计协议书
- 蔬菜配送合作合同范本
- 分期付款合同模板集锦
- 会签单合同模板
- 全新对讲机服务合同下载
- 劳务出资合伙协议合同
- 个人租车租赁合同范本
- 区域经理年终工作总结汇报
- 2019版新人教版高中英语必修+选择性必修共7册词汇表汇总(带音标)
- 初中八年级音乐-劳动号子《军民大生产》
- 中层领导的高绩效管理
- 小小银行家-儿童银行知识、理财知识培训
- 机械基础知识竞赛题库附答案(100题)
- 阅读理解特训卷-英语四年级上册译林版三起含答案
- 国库集中支付培训班资料-国库集中支付制度及业务操作教学课件
- 屋面及防水工程施工(第二版)PPT完整全套教学课件
- 2023年上海青浦区区管企业统一招考聘用笔试题库含答案解析
- 2023年高一物理期末考试卷(人教版)
评论
0/150
提交评论