第八课——菜单、工具栏和状态栏

一、菜单

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(窗格的风格类型)

 

posted @ 2017-12-02 17:12  GGBeng  阅读(1086)  评论(0编辑  收藏  举报