VS环境下MFC状态栏编程(设置状态栏大小,字体大小,背景颜色和文字颜色等)

需要做出的效果

1、我新建的项目是带ribbon的mfc多文档,结果在mainfrm的头文件里面 CMFCRibbonStatusBar  m_wndStatusBar;后来发现这样的话用不了很多状态栏以前的函数,所以先检查状态栏变量的声明

     需要改为CMFCStatusBar  m_wndStatusBar;

2、在资源视图里面,String Table里面插入三个字符

    

3、为了能改变状态栏的文字的颜色和背景颜色需要加入oncommand

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
     //添加的ON_COMMAND_RANGE,第一个参数是起始值,第二个参数是终止值
    ON_COMMAND_RANGE(IDS_STATUS_PANE1,IDS_STATUS_PANE3,NULL)
END_MESSAGE_MAP()

3、然后再mainframe的onCreate函数里面插入一下代码

    static UINT indicatros[]=
    {
        IDS_STATUS_PANE1,
        IDS_STATUS_PANE2,
        IDS_STATUS_PANE3,
    };
    if (!m_wndStatusBar.Create(this)||!m_wndStatusBar.SetIndicators(indicatros,sizeof(indicatros)/sizeof(UINT)))
    {
        TRACE0("未能创建状态栏\n");
        return -1;      // 未能创建
    }
    //设置状态栏的字体
    CFont* fontstatus=new CFont;
    fontstatus->CreateFont(15,0,0,0,FW_BOLD,FALSE,FALSE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH |FF_MODERN,_T("宋体"));
    m_wndStatusBar.SetFont(fontstatus);
    //获取状态栏索引号
    int a = m_wndStatusBar.CommandToIndex(IDS_STATUS_PANE1);  //
    int b = m_wndStatusBar.CommandToIndex(IDS_STATUS_PANE2);  //
    int c = m_wndStatusBar.CommandToIndex(IDS_STATUS_PANE3);  //
    //设置窗格宽度
    m_wndStatusBar.SetPaneWidth(a,250);
    m_wndStatusBar.SetPaneWidth(b,180);
    m_wndStatusBar.SetPaneWidth(c,180);
    //设置背景颜色
    //m_wndStatusBar.SetPaneBackgroundColor(vecIndex,RGB(255,255,255));
    //m_wndStatusBar.SetPaneBackgroundColor(posIndex,RGB(255,255,255));
    //m_wndStatusBar.SetPaneBackgroundColor(valIndex,RGB(0,32,64));
    //设置文本颜色
    m_wndStatusBar.SetPaneTextColor(a, RGB(0, 0, 0));
    m_wndStatusBar.SetPaneTextColor(b, RGB(0, 0, 0));
    m_wndStatusBar.SetPaneTextColor(c, RGB(0, 0, 0));
    //开定时器,实时显示时间
    SetTimer(1,1000,NULL);

4.在OnTimer里面改变面板上日期的部分

void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    //填充测量时间
    COleDateTime Now;
    Now=COleDateTime::GetCurrentTime();
    WORD y,m,d,h,i,s;
    CString str;
    y=Now.GetYear();
    m=Now.GetMonth();
    d=Now.GetDay();
    h=Now.GetHour();
    i=Now.GetMinute();
    s=Now.GetSecond();
    str.Format("%d年%d月%d日%d:%d:%d",y,m,d,h,i,s);
        m_wndStatusBar.SetPaneText(0,str);
    CMDIFrameWndEx::OnTimer(nIDEvent);
}

至此,关于状态栏的大多数功能都实现了。

猜你喜欢

转载自www.cnblogs.com/rain-drop/p/8926941.html
今日推荐