更新状态栏窗格的文本
本文说明如何更改显示在 MFC 状态栏窗格中的文本。 状态栏(CStatusBar 类的窗口对象)包含多个“窗格”。每个窗格都是状态栏的矩形区域,可用于显示信息。 例如,很多应用程序在最右侧的窗格中显示了 CAPS LOCK、NUM LOCK 和其他键的状态。 应用程序通常还会在最左侧的窗格中显示信息性文本;该窗格是窗格 0,有时称为“消息窗格”。例如,默认 MFC 状态栏使用消息窗格显示一个字符串,说明当前选定的菜单项或工具栏按钮。 状态栏中的图形显示了应用程序向导创建的 MFC 应用程序中的状态栏。
默认情况下,在创建窗格时,MFC 不启用 CStatusBar
窗格。 若要激活窗格,必须为状态栏上的每个窗格使用 ON_UPDATE_COMMAND_UI 宏并更新窗格。 由于窗格不会发送 WM_COMMAND 信息(它们与工具栏按钮不同),必须手动键入代码。
例如,假设某个窗格将 ID_INDICATOR_PAGE
设为其命令标识符,并且在文档中包含当前页码。 以下过程说明如何在状态栏中创建新窗格。
制作新窗格
定义窗格的命令 ID。
在“视图”菜单上,单击“资源视图”。 右键单击项目资源,然后单击“资源符号”。 在“资源符号”对话框中,单击
New
。 键入命令 ID 名称:例如,ID_INDICATOR_PAGE
。 为 ID 指定值或接受“资源符号”对话框建议的值。 例如,对于ID_INDICATOR_PAGE
,请接受默认值。 关闭“资源符号”对话框。定义要显示在窗格中的默认字符串。
在“资源视图”打开后,在列出应用程序资源类型的窗口中双击“字符串表”。 在“字符串表”编辑器打开后,从“插入”菜单中选择“新建字符串”。 选择窗格的命令 ID(例如
ID_INDICATOR_PAGE
),然后键入一个默认字符串值,例如“Page”。 关闭字符串编辑器。 (您需要默认字符串来避免编译器错误。)将窗格添加到 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, };
要在窗格中显示文本,推荐的方法是在窗格的更新处理程序函数中调用 CCmdUI
类的 SetText
成员函数。 例如,你可能要设置包含当前页码的整数变量 m_nPage,并使用 SetText
将窗格的文本设置为该数字的字符串版本。
注意
建议使用 SetText
方法。 可以通过调用 CStatusBar
成员函数 SetPaneText
在稍微低一点的级别中执行此任务。 尽管如此,您仍需一个更新处理程序。 如果窗格没有此类处理程序,MFC 将自动禁用窗格,并清除其内容。
以下过程显示如何使用更新处理程序函数在窗格中显示文本。
制作窗格显示文本
为命令添加命令更新处理程序。
为处理程序手动添加原型,如此处为
ID_INDICATOR_PAGE
(在 MAINFRM.H 中)所示的:afx_msg void OnUpdatePage(CCmdUI* pCmdUI);
在合适的 .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); }
此处理程序的最后三行是显示文本的代码。
在合适的消息映射中,添加 ON_UPDATE_COMMAND_UI 宏,如此处为
ID_INDICATOR_PAGE
所示(在 MAINFRM.CPP 中):ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
定义 m_nPage 成员变量(属于 CMainFrame
类)的值后,此方法将使得在空闲处理期间在窗格中显示页码,这与应用程序更新其他指示符的方式相同。 如果 m_nPage 发生更改,则会在下一个空闲循环中显示更改。