状态栏

(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); 

(注解:以上设置状态栏位置、宽度、背景色的部分比较有借鉴意义)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值