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

上传人:rrsccc 文档编号:8863442 上传时间:2021-01-21 格式:PPT 页数:33 大小:359.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、第6章菜单、工具栏和状态栏,6.1 菜单 6.2 工具栏 6.3 状态栏,第6章菜单、工具栏和状态栏,6.1 菜单 6.2 工具栏 6.3 状态栏,6.1菜单 (1 of 11),对于菜单的显示都遵循下列一些规则: 若某菜单项标题后有“”,那么在点击某菜单项会弹出一对话框。 若某项菜单有子菜单,那么在该菜单项文本后有“”。 菜单项需要助记符,用括号将带下划线的字母括起来。助记符与Alt构成一个组合键,当按住“Alt”键不放,再敲击该字母时,对应的菜单项就会被选中。 若某项菜单需要快捷键的支持,则一般将其列在相应菜单项文本之后。任何时候按下快捷键,相应的菜单命令都会被执行。,图6.1 File菜

2、单,6.1菜单 (2 of 11),6.1.1 用编辑器设计菜单 编辑菜单 在菜单的空位置上双击鼠标左键,则出现它的属性对话框,如图。,图6.3 菜单属性对话框,6.1菜单 (3 of 11),6.1菜单 (4 of 11),需要注意的是: 当菜单项的属性中选中了Pop_up(该菜单包含子菜单)时,对话框中ID、Separator和Prompt项无效。 增加新的菜单项后,用户可以用鼠标将菜单项拖到其他位置,而当菜单项位置改变时,其属性并不改变。,图6.5 添加的菜单项,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 消息的选择,6.1菜单 (6 of 11),(3) 单击Add Function按钮或双击COMMAND消息,输入成员函数的名称。如图6.7所示。 (4) 单击OK。选择新增加的成员函数,单击Edit Code按钮(或直接在函数名双击鼠标左键),就可以在此成员函数中添加一些代码。例如: void CMainFrame:OnScoreIn() / TODO: A

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

5、对话框中,选择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 nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL ); 其中: x和y表示菜单顶端(一

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

7、D号为 IDR_MENU1) 。 (4) 按Ctrl+W快捷键打开ClassWizard,将出现一对话框,询问是“选择一个已存在的类”,还是“创建一个新类”。选择“选择一个已存在的类”项并选定CMainFrame类。,6.1菜单 (11 of 11),(5) 在CMainFrame类中,选择上表中所列的菜单ID,双击COMMAND消息。这里仅为菜单ID_MENU_SCOREIN映射COMMAND消息,添加代码: void CMainFrame:OnMenuScorein() AfxMessageBox(现在就输入成绩吗?); (6) 在CMainFrame类加入WM_CONTEXTMENU消息

8、处理函数,代码如下: 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) 运行并测试。在应用程序的窗口客户区中单击鼠标右键,弹出如图菜单。 “成绩打印”菜单命令没有消息处理函数,因此它是灰显的,用户不能使用它们。若用户选中“成绩输入”菜单命令,则会执行相应的代码

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

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

11、空格而按钮右侧没有空格,拖动该按钮向左移动并当按钮的左边界接触到前面按钮时,释放鼠标键,则此按钮右侧将出现空格。 如果按钮左、右两侧均有空格,拖动该按钮向右移动并当接触到相邻按钮时,则此按钮左侧的空格保留,按钮右侧的空格消失。相反,拖动该按钮向左移动并当接触到前一个相邻按钮时,则此按钮左侧的空格消失,右侧的空格保留。,6.2工具栏 (4 of 6),可以对工具栏进行的操作: (5) 设置工具栏按钮的属性 双击某工具按钮,就会弹出其属性对话框,如下图所示。,图6.15 工具栏按钮属性对话框,6.2工具栏 (5 of 6),6.2.2 工具栏和菜单相结合 例Ex_T 其中:nIndex表示设置的窗

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

13、和ID_RIGHT,其字符个数的多少决定窗格的大小。如图6.18。,图6.17 字符串属性对话框,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以后允许访问和编辑该代码。 prot

14、ected: /AFX_MSG(CEx_SdiView) afx_msg void OnUpdateXY(CCmdUI* pCmdUI); /AFX_MSG DECLARE_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, OnUp

15、dateXY) /AFX_MSG_MAP,6.3状态栏 (7 of 9),(7) 增加修改状态栏指示器的消息映射函数代码,状态栏的窗格需要更新时,应用程序框架自动调用此函数。 void CEx_SdiView:OnUpdateXY(CCmdUI* pCmdUI) pCmdUI-Enable(TRUE);/ 使窗格文本能被更新 ,6.3状态栏 (8 of 9),(8) 用ClassWizard在CEx_SdiView类中加入WM_MOUSEMOVE(鼠标移动)消息处理函数,并添加下列代码。该函数先获得状态栏对象的指针,然后调用SetPaneText函数更新第三和第四窗格中的文本。 void CE

16、x_SdiView:OnMouseMove(UINT nFlags, CPoint point) CString str; CMainFrame* pFrame=(CMainFrame*) AfxGetApp()-m_pMainWnd; CStatusBar* pStatus= ,6.3状态栏 (9 of 9),(9) 将MainFrm.h文件中的受保护变量m_wndStatusBar变成公有变量。 (10) 在Ex_SdiView.cpp文件的开始处增加下列语句: #include “MainFrm.h” (11) 编译并运行,如图。,第6章菜单、工具栏和状态栏,6.1 菜单 6.2 工具栏 6.3 状态栏,

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1