第八课——菜单、工具栏和状态栏
一、菜单
1. 关键点
- 菜单系统设计的规则:菜单项文本的格式、助记符等
- 符号&:用来指定后面的字符是一个助记符
- 顶层菜单:可以是一个简单的菜单命令,也可以是下拉菜单
- 用菜单编辑器添加和修改菜单项
- CMenu类:用来处理菜单的一个MFC类
2. 切换应用程序菜单
效果:在两个菜单资源间切换
为CMainFrame类添加一个CMenu类型的成员变量m_NewMenu
两个CMenu成员函数的妙用:Detach、LoadMenu
- Detach:使菜单对象与菜单句柄分离
- LoadMenu:装载菜单资源,若菜单对象的句柄已经创建,则会发生运行时错误
- CWnd类的成员函数SetMenu:设置应用程序的菜单
3. 使用键盘快捷键
效果:为上面两个菜单(资源)定义键盘快捷键,使菜单项和快捷键联用
- 在“ResourceView选项卡”→双击Accelerator结点→双击加速键列表的最下端的空行
4. 菜单的编程控制
- 需求性分析:让用户自己定制菜单,所谓编程控制,即在程序中进行控制
- 程序运行时处理有关菜单的操作:创建菜单、装入菜单、删除菜单项、设置菜单项的状态等
上面的这些操作都可以用MFC菜单类CMenu来实现,举例:
- CMenu类的CreateMenu和CreatePopupMenu函数分别用来创建一个菜单或子菜单框架
- CMenu类的LoadMenu函数可将菜单资源装入应用程序中
- CMenu类的AppendMenu或InsertMenu函数可添加一些菜单项
- 还有许多函数,譬如重新设置应用程序菜单、删除指定的菜单项等等。
5. 使用快捷菜单
快捷菜单实现函数:CMenu::TrackPopupMenu
使用上面的函数可以创建快捷菜单
右击会发送WM_CONTEXTMENU通知消息,故快捷菜单是通过其映射函数实现的
二、工具栏
1. 关键点
- 调出工具栏编辑器:Resource View选项卡→双击Toolbar
- 绘制一个工具按钮的位图:类似画图
- 在工具栏中插入空格:向左或右拖动一下就会多一个空格
- 属性中的提示:若为“新建文档\n新建”,那么将会在状态栏显示“新建文档”,而在弹出的提示信息中显示“新建”
2. 工具栏与菜单项相结合
- 效果:选择工具按钮或菜单命令的操作结果是一样的(更快速,和快捷键一样)
- 方法:将工具按钮的ID设置为相关联的菜单项ID
3. 多个工具栏的使用
- 略,暂用不到
三、状态栏
1. 关键点
- 可以被分割成几个窗格,用来显示多组信息
- MainFrm.cpp中定义了一个静态的indicators数组,它被用作状态栏窗格的定义
2. indicators数组
- 定义这里面的元素是一些标识常量或是字符串资源的ID号
- 默认包含4个元素,分别是ID_SEPARATOR、ID_INDICATOR_CAPS、ID_INDICATOR_NUM、ID_INDICATOR_SCRL。
- ID_SEPATATOR的作用:标识信息行窗格(菜单项或工具按钮的许多信息在此显示)
- 其余3个元素则用于标识指示器窗格,分别显示CapsLock、NumLock和ScrollLock这3个键的状态。
3. 常用操作
- CStatusBar类封装了状态栏的大部分操作。
①窗格
- 状态栏中的窗格分为:信息行窗格、指示器窗格
- 增加信息行窗格窗格:在indicators数组中增加一个ID_SEPARATOR标识
- 增加用户指示器窗格:在indicators数组中增加一个在字符串表中定义过的资源ID
②显示文本
- 更新窗格中的文本:BOOL SetPaneText(int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE);
- 注:nIndex(设置的窗格索引)、lpszNewText(要显示的字符串)
4. 改变风格
- 风格类型:SBPS_NOBORDERS、SBPS_POPOUT等。
void SetPaneInfo(int nIndex, UINT nID, UINT nStyle, int cxWidth); void SetPaneStyle(int nIndex, UINT nStyle);
- 注:nIndex(要设置的状态栏窗格的索引)、nStyle(窗格的风格类型)