VS2015 MFC 状态栏编程

一  VS2015MFC 中自带的状态栏创建过程

1.1 成员变量  protected CStatusBar m_wndStatusBar;

1.2 CMainFrame::OnCreate()中m_wndStatusBar.Create(this);创建CStatusBar对象

1.3 CMainFrame::OnCreate()中设置指示器 m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); SetIndicators函数的第二个参数:表示数组中元素的个数

1.3.1 indicators它是一个static UINT 类型的数组,用于设定元素窗口的数目,原始的定义如下:

 

static UINT indicators[] =
{
    ID_SEPARATOR,           // 状态行指示器
    ID_INDICATOR_CAPS,      // CapsLock键   定义在String Table中
    ID_INDICATOR_NUM,       // NumLock键    定义在String Table中
    ID_INDICATOR_SCRL,      // 滚动         定义在String Table中
};

 

1.3.2 如果要修改状态栏中元素窗口的数目,可以在这个数组中添加或者删除字符串ID。要在状态栏中增加一个窗格,现在StringTable中先增加一个字符串资源

String Table中增加以下两个字符串资源
IDS_TIMER         时钟
IDS_PROGRESS   进度条

static UINT indicators[] =
{
    ID_SEPARATOR,           // 状态行指示器
    IDS_TIMER,                // String Table中预先定义了
    IDS_PROGRESS,           // String Table中预先定义了
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
};

//运行程序 可以看到状态栏比之前多了两个格子:时钟|进度条

1.4 给窗格填充内容 时钟为系统时间,进度栏显示进度

    SetTimer(1, 1000, NULL);
    CTime t = CTime::GetCurrentTime();
    CString strTime = t.Format("%H:%M:%S");//设置时间显示格式
    //m_wndStatusBar.SetPaneText(1, strTime); 如果知道索引号
    //如果不知道索引号,可以通过状态栏对象的成员函数CommandToIndex函数获取到索引值
    int indexTime;
    indexTime=m_wndStatusBar.CommandToIndex(IDS_TIMER);
    m_wndStatusBar.SetPaneText(indexTime, strTime);
    //上面存在一个问题,格子不能显示完整的时间字符串,需要设置格子的宽度

修改以上代码如下

    CTime t = CTime::GetCurrentTime();
    CString strTime = t.Format("%H:%M:%S");//设置时间显示格式
    //m_wndStatusBar.SetPaneText(1, strTime); 如果知道索引号
    //如果不知道索引号,可以通过状态栏对象的成员函数CommandToIndex函数获取到索引值

    CClientDC dc(this);  
    CSize sz = dc.GetTextExtent(strTime); //获取字符串信息,包括宽度

    int indexTime;
    indexTime=m_wndStatusBar.CommandToIndex(IDS_TIMER);
    m_wndStatusBar.SetPaneInfo(indexTime,IDS_TIMER,SBPS_NORMAL,sz.cx); //设置格子宽度以适配字符串宽度
    m_wndStatusBar.SetPaneText(indexTime, strTime);
    //这样设置后,还有一个问题是,时间是静止的,需要不断的变化,考虑把它放在定时器里面

 

转载于:https://www.cnblogs.com/zhou8744/p/10629735.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值