参考了MFC源码,继承CMFCRibbonStatusBarPane,重写OnDraw虚函数,实现字体颜色和图标的切换。

//.h文件内容#pragma once#include "afxribbonstatusbarpane.h"#include "MemDC.h"class CScale3DCStatusBarPanel : public CMFCRibbonStatusBarPane{public:	CScale3DCStatusBarPanel(	UINT     nCmdID,                     // Pane command id	LPCTSTR  lpszText,                   // Pane label	BOOL     bIsStatic = FALSE,          // Pane is static (non-clickable)	HICON    hIcon = NULL,               // Pane icon	LPCTSTR  lpszAlmostLargeText = NULL);// The almost large text in pane	        ~CScale3DCStatusBarPanel();        	virtual void OnDraw(CDC* pDC);	protected:	BOOL  m_bIsOpen = TRUE;     //是否显示红色字体public:	void   SetTextColor(BOOL bIsValue = FALSE);     //设置字体颜色};//.cpp文件内容#include "stdafx.h"#include "Scale3DCStatusBarPanel.h"#include "resource.h"CScale3DCStatusBarPanel::CScale3DCStatusBarPanel(UINT nCmdID, LPCTSTR lpszText, BOOL bIsStatic, HICON hIcon, LPCTSTR lpszAlmostLargeText){	CommonInit();	//父类成员变量	m_strAlmostLargeText = 	(lpszAlmostLargeText == NULL) ? _T("") : lpszAlmostLargeText;		m_bIsStatic = bIsStatic;        m_strText = lpszText;	m_bIsOpen = FALSE;//自定义成员变量}void CScale3DCStatusBarPanel::OnDraw(CDC* pDC){	ASSERT_VALID(this);	ASSERT_VALID(pDC);	if (m_rect.IsRectEmpty())	{		return;	}	else	{		m_rt.CopyRect(m_rect);	}	OnFillBackground(pDC);	pDC->SetTextColor(RGB(21, 66, 139));	pDC->DrawText(m_strText, m_rect, DT_LEFT);	OnDrawBorder(pDC);}void CScale3DCStatusBarPanel::SetTextColor(BOOL bValue){	m_bIsOpen = bValue;}

调用方法如下:

m_wndStatusBar.AddElement(new CScale3DCStatusBarPanel(ID_STATUSBAR_PANE4, strComWork + strComWork1 + _T("(0)"), TRUE), strComWork);

CScale3DCStatusBarPanel* pElem = (CScale3DCStatusBarPanel*)m_wndStatusBar.GetElement(7);

pElem->SetAlmostLargeText(_T("........................................"));

pElem->Redraw();