最佳答案:
CStatusBar是带有一行文本输出窗格的控件。
详情介绍
CStatusBar是带有一行文本输出窗格的控件。
- 中文名
- 指示器
- 外文名
- CStatusBar
- 实质
- 带有一行文本输出窗格的控件
- 作用
- 作消息行和状态指示器
- 类别
- 定义
CStatusBar简介
一个CStatusBar 对象是一个带有一行文本输出窗格的控件,或者称为“指示器”。
这些输出窗格常被用作消息行和状态指示器。例如:简单解释所选菜单命令的
菜单帮助消息行,作为显示SCROLL LOCK,NUMLOCK 以及其它键状态的指
示器。
在MFC4.0 之后新增加的成员函数CStatusBar:: GetStatusBarCtrl,允许你利用
Windows 通用控件对状态条的定制和其它功能的支持。CStatusBar 成员函数提
供了Windows 通用控件的大多数功能;但是,当你调用GetStatusBarCtrl 时,
你可以赋予你的状态条更多的Windows95 状态条的特性。当你调用
GetStatusBarCtrl 时, 它将返回一个对CStatusBarCtrl 对象的引用。参见
CStatusBarCtrl 可以获得有关使用Windows 通用控件设计工具条的更多信息。
有关通用控件的更多的一般信息,请参见“Windows 95 SDK 程序员参考”中
的“通用控件”。
框架将指示器的信息保存在一个数组中,且最左边的的指示器位于0 位置上。
当创建一个工具条时,可以使用一个字符串ID 数组,框架把这一组ID 与对应
的指示器关联起来。此后,你就可以使用字符串ID 或索引值访问一个指示器。
缺省的,第一个指示器是“可伸缩的”:该指示器占据了其它指示器窗格未用
到的状态条长度,因此其它窗格是右对齐的。
可以按下列步骤创建一个状态条:
1. 构造CStatusBar 对象。
2. 调用Create(或CreateEx)函数来创建状态条窗口并将它连接到CStatusBar
对象。
3. 调用SetIndicators 函数将字符串ID 与每一个指示器联系起来。
有三种办法可以更新状态条窗口中的文本:
1. 调用CWnd::SetWindowText 只更新窗格0 中的文本。
2. 在状态条的ON_UPDATE_COMMAND_UI 处理程序中调用
CCmdUI::SetText 函数。
CStatusBar成员函数
CStatusBar构造函数
CStatusBar() 构造一个CStatusBar对象。
Create() 创建状态条,并将它与CStatusBar对象连接,且设置初始字体和条高度。
CreateEx() 创建一个具有嵌入CStatusBarCtrl对象附加风格的CStatusBar对象。
SetIndicators() 设置指示器ID。
CStatusBar属性函数
CommandToIndex() 获取给定指示器ID的索引。
GetItemID() 获取给定索引的指示器ID IDGetItemRect 获取给定索引值得显示范围。
GetItemRect() 获取给定索引值的显示矩形。
GetPaneInfo() 获取一个给定索引的指示器ID,风格和宽度。
SetPaneInfo() 设置一个给定索引的指示器ID,风格和宽度。
GetPaneStyle() 获取一个给定索引的指示器风格。
SetPaneStyle() 设置一个给定索引的指示器风格。
GetPaneText() 获取一个给定索引的指示器文本。
SetPaneText() 设置一个给定索引的指示器文本。
CStatusBar重载函数
DrawItem() 当一个主绘制的状态栏控件的外观改变时,调用此函数。
CStatusBar状态栏示例
1. 新建一个多文档的MFC应用程序;
2. 状态栏的定义:在CMainframe类中定义,如下:
protected: // control bar embedded members
CStatusBar m_wndStatusBar;
3. 在CMainframe类的OnCreate函数里,生成状态栏:
//////////////////////////////////////////////////////////////////////////
//状态栏
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status barn");
return -1; // fail to create
}
注意,上述有一个变量indicators;它是一个静态的一个数组,它的定义是有MFC自动生成的;具体代码如下:
//////////////////////////////////////////////////////////////////////////
static UINT indicators =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
说明:indicators存放的是字符串的ID 号;不同的ID号,对应不同的字符串;
如果想要在右下角的状态栏上继续添加状态栏,可以先新建一个字符串的资源,设置相应的ID号;将该ID号添加到indicators数组中即可;
比如:我们新建两个字符串资源,属性为 IDS_PROCESS 进度 IDS_TIME 时间 ;然后将它们的ID号加入到indicators数组中;运行即可;
4. 在状态栏实时显示系统时间
很明显,实时显示需要动态每隔一秒钟显示一下时间,因此需要用到WM_TIME消息响应;因此对CMainframe类增加WM_TIME消息响应;
4.1 在类的OnCreate函数中,设置定时器周期; SetTimer(1,1000,NULL);
4.2 在OnTimer函数中添加如下代码:
CTime time=CTime::GetCurrentTime();//获得当前时间
CString str="时间"+time.Format("%H-%M-%S");//将时间转化为字符串
int index=0;//定义一个整型变量,用于存储字符串资源的ID,初始化为0
index=m_wndStatusBar.CommandToIndex(IDS_TIME);
//一下是为了获得字符串STR的空间大小,是str字符串完整的呈现出来;
CClientDC dc(this);
CSize zs=dc.GetTextExtent(str);//获得str字符串画出来时的大小
m_wndStatusBar.SetPaneInfo(index,IDS_TIME,SBPS_NORMAL,zs.cx);//设置索引为index的状态栏的宽度
m_wndStatusBar.SetPaneText(index,str,TRUE);//将含有时间的str字符串显示在状态栏上;
免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报
举报