1、CStatusBar在MFC中类继承关系:
CObject
CCmdTarget
CWnd
CControlBar
CStatusBar
2、CStatusBar成员函数介绍:
virtual BOOL Create(
CWnd* pParentWnd,
DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM,
UINT nID = AFX_IDW_STATUS_BAR
);
函数用途:创建一个CStatusBar并将其与CStatusBar对象关联;
参数说明:pParentWnd:指向CStatusBar的父窗口(Windows窗口);
dwStyle:CStatusBar的类型,CBRS_TOP:将Bar放在框架的顶部,CBRS_BOTTOM:将其放在框架的底部。CBRS_NOALIGN:当父窗口改变时,不重型调整Bar;
nID:toolbar的子窗口ID;
返回值:成功返回非零,否则返回零;
2、BOOL SetIndicators(
const UINT* lpIDArray,
int nIDCount
);
函数用途:加载lpIDArray中的ID所对应的字符串资源,并将ID所对应的文本保存在字符串资源中;
参数说明:lpIDArray:ID队列指针
nIDCount:队列中元素的个数;
返回值:成功返回非零,否则返回零;
3、BOOL SetPaneText(
int nIndex,
LPCTSTR lpszNewText,
BOOL bUpdate = TRUE
);
函数用途:将CStatustBar中的长方块设置成lpszNewText所指向的内容;
参数说明:nIndex:长方块的索引号(从零开始计,第零个固定用来状态指示)
lpszNewText:需要加载的内容;(需要在第nIndex个长方块上显示的字符串)
bUpdate:等于TRUE时,当加载了新的字符内容后,将长方块设置为无效。无效使得窗口自动刷行,那么新内容就被显示在界面上了。
4、void GetItemRect(
int nIndex,
LPRECT lpRect
) const;
函数用途:将nIndex所在的位置的矩形坐标拷贝到lpRect中。
参数说明:nIndex:长方块的标识;
lpRect:指向Rect结构的指针,用来保存获得到的矩形坐标;
返回值:无
注意:坐标是以象素为单位的,原点在左上角。
5、void GetPaneInfo(
int nIndex,
UINT& nID,
UINT& nStyle,
int& cxWidth
) const;
函数用途:获得Pane的相关信息:ID,Style,宽度。
参数说明:nIndex:需要获得的Pane的索引
nID:nIndex所对应Pane的ID
nStyle:nIndex对应的Pane的类型;
cxWidth:nIndex对应的Pane的宽度;
返回值:无
6、void SetPaneInfo(
int nIndex,
UINT nID,
UINT nStyle,
int cxWidth
);
函数说明:设置Pane的相关信息;
参数说明:nIndex:需要设置的Pane的索引;
其余和5相同;
返回值:无
7、void SetPaneStyle(
int nIndex,
UINT nStyle
);
函数说明:设置Pane的类型
参数说明:nIndex:需要设置的Pane的索引
nStyle:类型;
返回值:无
nStyle的值可以为:
The status-bar style. In addition to the standard Windows styles, these styles are supported.
CBRS_TOP Control bar is at top of frame window.
CBRS_BOTTOM Control bar is at bottom of frame window.
CBRS_NOALIGN Control bar is not repositioned when the parent is resized.
8、UINT GetPaneStyle(
int nIndex
) const;
函数说明:获得Pane的类型
参数说明:nIndex:需要获得的Pane的索引
返回值:无
举例:
生成一个MFC应用程序,参照如下说明修改代码:
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_CLOCK,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
说明:
indicator数组提供了状态栏窗格的分配信息,它的第一项一般为ID_SEPARATOR,该ID对应的窗格用来显示命令提示信息,后三项都是字符串ID,读者可以在String Table字符串资源中找到这三个字符串分别是CAP、NUM和SCRL。它们对应的三个窗格用来显示键盘的状态。
现在让我们来给状态栏再加一个时间窗格,它将用来显示系统时间。显示的格式是hh:mm:ss,即时:分:秒。
首先在indicators数组的ID_SEPARATOR项之后插入一个名为ID_INDICATOR_CLOCK的ID。然后找到并双击名为String Table的字符串资源,打开字符串资源编辑窗口。接着在编辑窗口内按Insert键以插入一个新的字符串,请指定字符串的ID为ID_INDICATOR_CLOCK,内容为00:00:00。状态栏将根据字符串的长度来确定相应窗格的缺省宽度,所以指定为00:00:00就为时间的显示预留了空间。
时间窗格显示的时间必须每隔一秒钟更新一次。更新时间窗格的正文可调用CStatusBar:: SetPaneText函数,要定时更新,则应利用WM_TIMER消息。在Windows中用户可以安装一个或多个计时器,计时器每隔一定的时间间隔就会自动发出一个WM_TIMER消息,而这个时间间隔可由用户指定。MFC的Window类提供了WM_TIMER消息处理函数OnTimer,我们应在该函数内进行更新时间窗格的工作。