第7节 状态栏
状态栏是带有一行文本输出窗 格的控制条,这些窗格称为“指示器”。例如,在“我的电脑”状态栏中含有3个“指示器”,分别显示文件信息、文件大小和所在位置等,如图14-48所示。

图14-48 资源管理器的状态栏
打开“md”绘图软件工程,用于演示状态栏的开发方法。
1)在资源视图的字符串表中,添加2个字符串资源作为状态栏的指示器文字,如图14-49所示。

图14-49 添加字符串资源
2)ID和文本见表14-8。
表14-8 字符串ID和文本

3)在CMainFrame::OnCreate函数中,修改状态栏创建代码。

4)编译并运行,测试程序,如图14-50所示。

图14-50 查看运行结果
注意:如果出现“afxres.rc(120)”的错误,则把其中的错误代码整行删除再按<Ctrl+S>组合键保存即可。
//AFX_IDS_UNNAMED_FILE "未命名文件"
5)在类视图中的CMainFrame类上添加一个公有成员函数,如图14-51所示。

图14-51 添加普通成员函数
6)修改函数代码。

7)在视图类中WM_MOUSEMOVE消息映射函数的开头添加一行代码。

8)编译并运行,测试程序,如图14-52所示。状态栏中间的“指示器”能够实时显示光标在视图中的坐标。(https://www.daowen.com)
9)在CMainFrame类中添加一个私有成员函数,用于自动刷新指示器文字,如图14-53所示。

图14-52 查看运行结果

图14-53 添加普通成员函数
10)修改函数代码。


11)在CMainFrame类的消息映射中,手工添加一个更新“指示器”消息。

12)在CMainFrame::OnCreate函数的末尾添加一行代码。

13)在CMainFrame类中添加WM_TIMER消息映射函数,如图14-54所示。

图14-54 添加WM_TIMER消息映射函数
14)修改函数代码。

15)编译并运行,测试程序。状态栏第3个“指示器”自动刷新当前时间,如图14-55所示。
16)有三种方法可以更新状态条指示器文字。
①调用CWnd::SetWindowText只更新第一个指示器中的文本。
②在状态栏的ON_UPDATE_COMMAND_UI消息映射函数中调用CCmdUI::SetText函数。

图14-55 查看运行结果
③调用SetPanelText函数更新任何窗格中的文本。