(1)一般情况,状态栏文字左对齐,可以通过添加“/t”中对齐,“/t/t”右对齐。
(2)修改默认状态栏:
看看主框架类的源程序。当中有这么一段
static UINT indicators[] =
{
ID_SEPARATOR,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
而在OnCreate中有这么一段
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))
这一句的作用是设置状态栏各部分的ID,默认的ID由indicators数组指定。由于MFC中把状态栏的第一栏设置为ID_SEPARATOR了,这是一个MFC默认的ID,所以它有一系列默认的操作,如显示“就绪”二字。我们想禁止MFC自动操作状态栏就必须修改indicators数组。
我们打开Resource View,修改String Table,找到那堆ID_INDICATOR开头的,在后面新加一个ID_INDICATOR_1。然后修改CMainFrame中indicators的声明
static UINT indicators[] =
{
ID_INDICATOR_1,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
然后编译运行程序。我们会发现,MFC不会再自动修改状态栏的文本了,可是前面添加的一句
m_wndStatusBar.SetPaneText(0, "Hello");
也不起作用了。这是为什么呢?
MSDN上有一篇介绍如果修改状态栏文本的文章。当中有一句
Note The SetText approach is recommended. It is possible to perform this task at a slightly lower level by calling the CStatusBar member function SetPaneText. Even so, you still need an update handler. Without such a handler for the pane, MFC automatically disables the pane, erasing its content.
意思大概是如果我们不为状态栏添加UPDATE的处理函数,MFC会自动禁止状态栏的该栏(pane)。按照MSDN的说法,我们需要增加UPDATE的处理函数。在MainFrm.h中添加
afx_msg void OnUpdate1(CCmdUI *pCmdUI);
在MainFrm.cpp中添加
ON_UPDATE_COMMAND_UI(ID_INDICATOR_1, OnUpdate1)
void CMainFrame::OnUpdate1(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
}
这样我们就可以往状态栏的第一栏写文字,而避开MFC对其的自动修改了。
(注:这是在别人博客上看到的,但我实际试验中,没有添加UPDATE函数,没有出现以上所说的问题)
(3)
m_wndStatusBar.CreateEx(this,SBT_TOOLTIPS,WS_CHILD | WS_VISIBLE | CBRS_BOTTOM,AFX_IDW_STATUS_BAR );
static UINT BASED_CODE Indicators[] =
{
ID_INDICATOR_CAPS, //此处可以自己添加ID,但需要在String Table里注册一下
ID_INDICATOR_NUM //此处什么符号都没有
};
m_wndStatusBar.SetIndicators(Indicators,sizeof(Indicators)/sizeof(UINT));
CRect rect;
GetClientRect(&rect);
m_wndStatusBar.SetPaneInfo(0,ID_INDICATOR_CAPS,SBPS_NORMAL,rect.Width()/2); m_wndStatusBar.SetPaneInfo(1,ID_INDICATOR_NUM,SBPS_STRETCH ,rect.Width()/2);
//如果格子数目不是,请将上面的最后一个参数更改
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,ID_INDICATOR_CAPS);
m_wndStatusBar.GetStatusBarCtrl().SetBkColor(RGB(120,20,10));//背景颜色
m_wndStatusBar.SetPaneText(0,"你好",0);
m_wndStatusBar.SetPaneText(1,"Welcome",0);
(注解:以上设置状态栏位置、宽度、背景色的部分比较有借鉴意义)