需要做出的效果
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); }
至此,關於狀態欄的大多數功能都實現了。