zoukankan      html  css  js  c++  java
  • 第八课——菜单、工具栏和状态栏

    一、菜单

    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
    • 绘制一个工具按钮的位图:类似画图
    • 在工具栏中插入空格:向左或右拖动一下就会多一个空格
    • 属性中的提示:若为“新建文档 新建”,那么将会在状态栏显示“新建文档”,而在弹出的提示信息中显示“新建”

    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(窗格的风格类型)
  • 相关阅读:
    每天OnLineJudge 之 “蛇形矩阵 ”
    Hello World 发生了什么?
    软件开发人员真的了解SQL索引吗(索引使用原则)
    软件开发人员真的了解SQL索引吗(聚集索引)
    项目经验总结(一)如何约定接口的定义
    min的个人网站终于创建起来了
    WCF单例服务,如何实现并发
    如何规范.net中的js开发(2)原理篇(更新版)
    网站架构之缓存应用(3)实现篇
    网站架构之缓存应用(1)概念篇
  • 原文地址:https://www.cnblogs.com/xzxl/p/7954842.html
Copyright © 2011-2022 走看看