MFC控件 状态条的简单介绍及使用 CStatusBar

来源:互联网 发布:数据库关系模式4nf 编辑:程序博客网 时间:2024/06/01 11:53

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”;