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:需要加载的内容;
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:类型;
返回值:无
8、UINT GetPaneStyle(
int nIndex
) const;
函数说明:获得Pane的类型
参数说明:nIndex:需要获得的Pane的索引
返回值:无
使用CStatusBar:
1、修改MainFrame中定义的静态变量indicators[]中成员为自己定义的ID,这里数组的下表就是函数中使用iIndex,
2、创建一个新MFC类,从CStatusBar类继承,可以在其中增加对CStatusBar的操作函数;
3、将CMainFrame中定义的CStatusBars m_wndStatusBar;改为自己增加类的对象,例如CMyStatusBar m_wndStatusBar;
例子:
1、修改indicators[]如下:
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
ID_SEPARATOR,
ID_SEPARATOR,
};
2、创建新类,在其中增加相应的处理函数,本例中没有增加其他的处理函数;
3、对菜单添加CMainFrame命令响应,函数如下:
void CMainFrame::OnModifybar()
{
// TODO: 在此添加命令处理程序代码
m_wndStatusBar.SetPaneText(2,"ab");
}
4、运行点击刚才添加命令响应的菜单,查看状态条的第三个Pane会显示“ab”;