更新状态栏窗格的文本

本文说明如何更改出现在 MFC 状态栏窗格的文本。状态栏 —类 CStatusBar 窗口对象 --包含多个 “窗格”。每个窗格是可以显示信息时所使用的状态栏的矩形区域。例如,许多应用程序显示 caps lock、 num lock 和其他键的状态在最右侧的窗格。应用程序通常还显示在窗格 (0) 的信息文本,有时称为 “消息窗格中最左侧的窗格”。例如,默认 MFC 状态栏使用消息窗格显示解释当前选定菜单项或工具栏按钮的字符串。在 状态栏 图形显示从应用程序向导创建的 MFC 应用程序状态栏。

默认情况下,,在创建窗格时, MFC 不启用 CStatusBar 窗格。若要激活窗格,必须在状态栏中的每个窗格使用 ON_UPDATE_COMMAND_UI 宏和更新窗格。由于窗格不会发送 WM_COMMAND 信息 (它们不是与工具栏按钮),则必须手动键入代码。

例如,假设某个窗格具有 ID_INDICATOR_PAGE 作为其订单标识符,并且已经在文档包含当前页编号。下面的过程在状态栏描述如何创建新的窗格。

提交新的窗格

  1. 定义窗格的命令 ID.

    查看 菜单上,单击 资源视图。右击项目资源并单击 Resource Symbols。在 " 资源符号 " 对话框,请单击 New。键入命令 ID 名称:例如, ID_INDICATOR_PAGE。为 ID 指定值或接受 " 资源符号 " 对话框建议的值。例如,对于 ID_INDICATOR_PAGE,接受默认值。关闭 " 资源符号 " 对话框。

  2. 定义一个默认字符串显示在窗格。

    通过资源视图打开,在列表中双击您的应用程序的资源类型的窗口的 String Table 。打开 String Table 的版本,从 Insert 菜单中选择 New String 。在字符串 " 属性 " 窗口中,选择您的窗格的命令 ID (例如, ID_INDICATOR_PAGE) 并为默认字符串值,例如 “页”。关闭字符串编辑器。(您需要默认字符串避免编译器错误。)

  3. 添加窗格。 indicators 数组。

    在文件 MAINFRM.CPP,找到 indicators 数组。此从左至右数组表所有的命令 ID 状态栏的指示符,按顺序。在适当点在数组,输入您的窗格的命令 ID,如下所示为 ID_INDICATOR_PAGE:

    static UINT indicators[] =
    {
       ID_SEPARATOR,           // status line indicator
       ID_INDICATOR_CAPS,
       ID_INDICATOR_NUM,
       ID_INDICATOR_SCRL,
       ID_INDICATOR_PAGE,
    };
    

建议使用此方法的方法显示在窗格的文本将调用类 CCmdUISetText 成员函数在一个更新处理程序函数的窗格中。例如,您可能希望将包含当前页数字和使用 SetText 设置窗格的文本为该数字的字符串版本的整数变量 m_nPage 。

说明说明

建议 SetText 方法。执行此任务。稍下面是能通过调用 CStatusBar 成员函数 SetPaneText。尽管如此,您仍需要更新处理程序。没有窗格这样的处理程序, MFC 自动禁用窗格中,清除其内容。

下面的过程演示如何使用更新处理程序函数显示在窗格的文本。

使窗格显示文本

  1. 添加命令的命令更新处理程序。

    手动添加处理程序的原型,如下所示为 ID_INDICATOR_PAGE (在 MAINFRM.H):

    afx_msg void OnUpdatePage(CCmdUI *pCmdUI);
    
  2. 在适当的 .CPP 文件中,添加处理程序的定义,如下所示为 ID_INDICATOR_PAGE (在 MAINFRM.CPP):

    void CMainFrame::OnUpdatePage(CCmdUI *pCmdUI)
    {
        pCmdUI->Enable(); 
        CString strPage;
        strPage.Format(_T("Page %d"), m_nPage); 
        pCmdUI->SetText(strPage); 
    }
    

    此处理程序前三行是显示文本的代码。

  3. 在适当的消息映射,添加 ON_UPDATE_COMMAND_UI 宏,如下所示为 ID_INDICATOR_PAGE (在 MAINFRM.CPP):

    ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
    

一旦定义 m_nPage 成员变量的值 (类 CMainFrame),此技术原因显示的分页在窗格中空闲时类似处理期间应用程序更新其他指示符。如果 m_nPage 更改,在下空闲循环内,该显示更改。

a9ys3wsb.collapse_all(zh-cn,VS.110).gif您想进一步了解什么?

请参见

参考

CStatusBar 类

概念

MFC中的状态栏实现