更新 Status-Bar 窗格的文本

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

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

例如,假设一个窗格具有 ID_INDICATOR_PAGE 其命令标识符,并且它包含文档中的当前页码。 以下过程介绍如何在状态栏中创建新窗格。

创建新窗格

  1. 定义窗格的命令 ID。

    在“视图”菜单上,单击“资源视图”。 右键单击项目资源,然后单击 “资源符号”。 在“资源符号”对话框中,单击 New。 键入命令 ID 名称:例如 ID_INDICATOR_PAGE。 指定 ID 的值,或接受“资源符号”对话框建议的值。 例如,对于 ID_INDICATOR_PAGE,接受默认值。 关闭“资源符号”对话框。

  2. 定义要在窗格中显示的默认字符串。

    打开“资源视图”后,在列出应用程序资源类型的窗口中双击 “字符串表 ”。 打开“字符串表”编辑器后,从“插入”菜单中选择“新建字符串”。 选择窗格的命令 ID(例如 ID_INDICATOR_PAGE),然后键入默认字符串值,例如“Page”。 关闭字符串编辑器。 (需要一个默认字符串以避免编译器错误。

  3. 将窗格添加到 指示器 数组。

    在文件 MAINFRM 中。CPP,找到 指示器 数组。 此数组按从左到右的顺序列出所有状态栏指示器的命令 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,
    };
    

在窗格中显示文本的建议方法是在窗格的更新处理程序函数中调用 SetTextCCmdUI 的成员函数。 例如,你可能想要设置包含当前页码的整数变量 m_nPage ,并用于 SetText 将窗格的文本设置为该数字的字符串版本。

注释

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更改,则显示将在下一个空闲循环期间发生更改。

想要详细了解哪些内容

另请参阅

MFC 中的状态栏实现
CStatusBar 类