第06章 菜单、工具栏和状态栏

(33页)

'第06章 菜单、工具栏和状态栏'
第6章菜单、工具栏和状态栏 6.1 菜单 6.2 工具栏 6.3 状态栏 6.4 交互对象的动态更新 作业 6.1菜单 对于菜单的显示都遵循下列一些规则: u 若点击某菜单项会弹出一对话框,那 么在该菜单项文本后有“…”。u 若某项菜单有子菜单,那么在该菜单 项文本后有“?”。u 菜单项需要助记符,用括号将带下划 线的字母括起来。助记符与Alt构成 一个组合键,当按住“Alt”键不放, 再敲击该字母时,对应的菜单项就会 被选中。u 若某项菜单需要快捷键的支持,则一 般将其列在相应菜单项文本之后。任 何时候按下快捷键,相应的菜单命令 都会被执行。 图6.1 File菜单 6.1菜单6.1.1用编辑器设计菜单 ? 编辑菜单 在菜单的空位置上双击鼠标左键,则出现它的属性对话框,如图。 菜单的空位置 图6.2 菜单编辑器 6.1菜单图6.3 菜单属性对话框 6.1菜单需要注意的是:u 当菜单项的属性中选中了Pop_up时,对话框中ID、Separator和Prompt 项无效。u 增加新的菜单项后,用户可以用鼠标将菜单项拖到其他位置,而当菜单项 位置改变时,其属性并没改变。 菜单项被拖动的位置 图6.4 拖动菜单项 图6.5 添加的菜单项 6.1菜单? 菜单命令的消息映射 [例Ex_Mmenu]“成绩输入”菜单项的映射。 (1)选择“View”菜单?“ClassWizard”命令项或按Ctrl+w快捷键,则出 现MFC ClassWizard对话框,切换到Message Maps页面。 (2)从“Class name”列表中选择CMainFrame,在IDs列表中选择 ID_SCORE_IN,然后在Messages框中选择COMMAND消息,如图。 图6.6 消息的选择 6.1菜单(3)单击[Add Function]按钮或双击COMMAND消息,输入成员函数的名称。如图。(4)单击[OK]。选择新增加的成员函数,单击[Edit Code]按钮(或直接在函数名双击鼠标左键),就可以在此成员函数中添加一些代码。例如:void CMainFrame::OnScoreIn() { // TODO: Add your command handler code here AfxMessageBox("现在就输入成绩吗?");}(5)编译并运行。在应用程序的顶层菜单上,单击“成绩输入”菜单项或按Alt+S组合键,如图。 图6.8 菜单命令执行的结果 图6.7 添加成员函数对话框 6.1菜单6.1.2使用键盘快捷键 (1)先打开上例的项目工作区窗口中Accelerator的资源项,双击 IDR_MAINFRAME,如图。 最下端的空行 图6.9 示例Ex_Sdi的加速键资源 6.1菜单(2)要建立一新的加速键,双击加速键列表的最下端的空行,如图,其中可设置的属性如表 (3)在上述对话框中,选择在Ex_Sdi示例中添加的“成绩输入”菜单项的ID号ID_SCORE_IN作为要联用的加速键的ID号,单击[Next Key Typed],按下Ctrl+1作为此加速键的键值。 图6.10 “Accel Properities”对话框 6.1菜单6.1.3菜单的编程控制 ? 菜单的基本操作 (1)创建菜单 CMenu类的CreateMenu和CreatePopupMenu用来创建一个菜单或子菜单框架, 原型如下: BOOL CreateMenu( ); // 产生一个空菜单 BOOL CreatePopupMenu( ); // 产生一个空的弹出式子菜单 (2)装入菜单 将菜单从资源装入应用程序中,需调用CMenu成员函数LoadMenu,或者用 SetMenu对应用程序菜单进行重新设置。 BOOL LoadMenu( LPCTSTR lpszResourceName ); BOOL LoadMenu( UINT nIDResource ); (3)添加菜单项 菜单创建后,可调用AppendMenu或InsertMenu函数添加一些菜单项。 AppendMenu是将菜单项添加在菜单的末尾处,InsertMenu在菜单的指定位置处 插入菜单项,并将后面的菜单项依次下移。 BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0,LPCTSTR lpszNewItem = NULL ); BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp ); BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ); BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp ); 6.1菜单需要注意的是:u nFlags为MF_BYPOSITION时,nPosition表示新菜单项要插入的具体位 置,为0时表示第一个菜单项,为 -1时,将菜单项添加菜单的末尾处。u nFlags的标志中,可以用“|”(按位或)来组合,例如 MF_CHECKED|MF_STRING等。有些组合是不允许的,例如 MF_DISABLED、MF_ENABLED和MF_GRAYED,MF_STRING、 MF_OWNERDRAW、MF_SEPARATOR和位图,MF_CHECKED和 MF_UNCHECKED 都不能组合在一起。u 当菜单项增加后,不管菜单依附的窗口是否改变,都应调用 CWnd::DrawMenuBar来更新菜单。 6.1菜单(4)删除菜单项调用DeleteMenu函数可将指定的菜单项删除,需要注意的是:调用该函数后,不管菜单依附的窗口是否改变,都应调用CWnd::DrawMenuBar使菜单更新:鼶eleteMenu的原型如下:BOOL DeleteMenu( UINT nPosition, UINT nFlags );nPosition表示要删除的菜单项位置,它由nFlags进行说明。若当nFlags为MF_BYCOMMAND时,nPosition表示菜单项的ID号,而当nFlags为MF_BYPOSITION时,nPosition表示菜单项的位置(第一个菜单项位置为0)。 (5)获取菜单项下面的三个CMenu成员函数分别获得菜单的项数、菜单项的ID号以及弹出式子菜单的句柄。UINT GetMenuItemCount( ) const;该函数用来获得菜单的菜单项数,调用失败后返回-1。UINT GetMenuItemID( int nPos ) const;该函数用来获得由nPos指定菜单项位置(以0为基数)的菜单项的标识号,若nPos是SEPARATOR,则返回-1。CMenu* GetSubMenu( int nPos ) const;该函数获得指定菜单的弹出式菜单的菜单句柄。该弹出式菜单位置由参数nPos指定,开始的位置为0。若菜单不存在,则创建一个临时的菜单指针。 6.1菜单? 给系统菜单添加一个菜单项 [例Ex_SysMenu] 向应用系统菜单中添加一个菜单项。 (1)打开一个单文档应用程序项目,若没有可按前面提及的方法进行创建。 (2)选择“View”菜单?“Resource Symbols…”命令,如图。 (3)单击[New],如图。在Name框中,可以指定一个用于菜单项的ID号。 在Value框中,可以定义该ID的值,系统要求定义的ID值应大于 15(0X000F)而小于61440(0XF000)。选择默认的ID值101,单击[OK] 按钮。 图6.12 “New Symbol”对话框 图6.11 “Resource Symbols”对话框 6.1菜单(4)在CMainFrame::OnCreate函数体(或自定义的函数)中加入代码:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ ... 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;
关 键 词:
第06章菜单、工具栏和状态栏
 剑锋文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:第06章 菜单、工具栏和状态栏
链接地址: //www.wenku365.com/p-43737552.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给剑锋文库发消息,QQ:1290478887 - 联系我们

本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】。本站是网络服务平台方,若您的权利被侵害,侵权客服QQ:1290478887 欢迎举报。

1290478887@qq.com 2017-2027 //www.wenku365.com 网站版权所有

粤ICP备19057495号 

收起
展开