需要做出的效果
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); }
至此,关于状态栏的大多数功能都实现了。