1 创建
①构造一个CStatusBar 对象
②调用Create或CreateEx函数创建一个状态栏创窗口并且它和CStatusBar对象结合
BOOL Create(
CWnd *pParentWnd, //父窗口
DWORD dwStyle=WS_CHILD | WS_VISIBLE | CBRS_BOTTOM,
UINT nID=AFX_IDW_STATUS_BAR //状态栏ID
);
③调用SetIndicators函数用设定状态栏的每一部分
BOOL SetIndicators(
const UINT *lpIDArray, //数组
int nIDCount //数组元素个数
);
eg.
static UINT indicators[] =
{
ID_AAA, // status line indicator
ID_BBB,
ID_CCC,
ID_DDD,
};
CStatusBar statusBar;
statusBar.Create(this);//父窗口为当前窗口,一般为FrameWnd,其他参数默认,会有一个该状态栏的默认ID:AFX_IDW_STATUS_BAR
statusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT));
2 六种方法更新状态栏文本
只能更新最左端的窗格
eg.
statusBar.SetWindowText("abcd");
通过状态栏的ON_UPDATE_COMMAND_UI处理函数
③BOOL SetPaneText(
int nIndex,
LPCTSTR lpszNewText,
BOOL bUpdate = TRUE
);
eg.
int index = 0; //该窗格在状态栏上的索引(数组中的索引)
index = statusBar.CommandToIndex(ID_XXX); //根据该窗格的ID取得索引值
statusBar.SetPaneText(index, "abcd");
④void CFrameWnd::SetMessageText(LPCTSTR lpszText)
eg. 这个函数只能改变索引为0的窗格文本
NOTE:此函数的调用要看在哪个类中,是否需要类型转换
如果在FrameWnd类中可直接使用
SetMessageText("abcd");
⑤virtual CWnd* CFrameWnd::GetMessageBar( );
返回一个指向状态栏的指针
⑥CWnd* CWnd::GetDescendantWindow(
int nID,
BOOL bOnlyPerm=FALSE
)const;
根据指定ID,返回一个指向该控件的指针
3 设置窗格信息
void SetPaneInfo(
int nIndex, //窗格索引, 即在Indicators数组里的索引
UINT nID, //窗格新的 ID
UINT nStyle, //风格
int cxWidth //窗格宽度
);
eg.
statusBar.SetPaneInfo(index, ID_XXX, SBPS_NORMAL, 20);
//index是要改变的窗格的索引, ID_XXX为窗格新的ID(一般不改,以前是什么还写什么), 20为宽度
?