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

至此,關於狀態欄的大多數功能都實現了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM