编译环境VS2010,基于单文档的VC工程,执行效果如下图所示:
1. 修改状态栏的字体及高度
状态栏的高度取决于使用字体的大小,所以这里只讲如果修改字体。
在OnCreate函数中调用状态栏对象的 m_wndStatusBar.SetFont()函数即可, 代码如下
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
... ...
//得到系统字体,然后修改必要参数即可
LOGFONT logfont;
GetObject(::GetStockObject(DEFAULT_GUI_FONT), sizeof(logfont), &logfont);
logfont.lfCharSet=GB2312_CHARSET;
logfont.lfWeight = FW_NORMAL;
logfont.lfHeight = 24;
lstrcpy(logfont.lfFaceName, _T("微软雅黑"));
//使用static对象,使得sfontStatusBar生命周期从创建开始至程序结束
//当然也可以使用成员对象
static CFont statusBarFont;
statusBarFont.CreateFontIndirect(&logfont);
m_wndStatusBar.SetFont(&statusBarFont);
... ...
}
2. 修改状态栏字体的颜色和背景颜色
2.1 假设状态栏,添加了 ID_INDICATOR_VectInfo, ID_INDICATOR_PixelPos, ID_INDICATOR_PixelVal,
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_VectInfo,
ID_INDICATOR_PixelPos,
ID_INDICATOR_PixelVal,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
2.2 为了修改状态栏中字体的颜色,必须添加状态栏格COMMAND相应函数,如下所示位置添加ON_COMMAND_RANGE的宏即可。
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
... ...
ON_COMMAND_RANGE(ID_INDICATOR_VectInfo,ID_INDICATOR_PixelVal,NULL)
... ...
END_MESSAGE_MAP()
2.3 设置状态栏个的内容颜色
bool CMainFrame::SetCoordStatus(IPoint2D& lineVect, DPoint2D& pixelPos, IPoint3D& pixelVal)
{
//得到窗格的索引
int vecIndex = m_wndStatusBar.CommandToIndex(ID_INDICATOR_VectInfo); //
int posIndex = m_wndStatusBar.CommandToIndex(ID_INDICATOR_PixelPos); //
int valIndex = m_wndStatusBar.CommandToIndex(ID_INDICATOR_PixelVal); //
CString strVec;
CString strPos;
CString strVal;
strVec.Format(_T("VEC(%.1f, %.2f)"), lineVect.Mag(), lineVect.Arg()*180/TMathTool::PI());
strPos.Format(_T("POS(%.1f, %.1f)"), pixelPos.x(), pixelPos.y());
strVal.Format(_T("RGB(=, =, =)"), pixelVal.x(), pixelVal.y(), pixelVal.z());
//设置窗格宽度
m_wndStatusBar.SetPaneWidth(vecIndex,160);
m_wndStatusBar.SetPaneWidth(posIndex,180);
m_wndStatusBar.SetPaneWidth(valIndex,180);
//设置背景颜色
m_wndStatusBar.SetPaneBackgroundColor(vecIndex,RGB(0,64,128));
m_wndStatusBar.SetPaneBackgroundColor(posIndex,RGB(0,64,64));
m_wndStatusBar.SetPaneBackgroundColor(valIndex,RGB(0,32,64));
//设置文本颜色
m_wndStatusBar.SetPaneTextColor(vecIndex, RGB(255, 255, 255));
m_wndStatusBar.SetPaneTextColor(posIndex, RGB(255, 255, 255));
m_wndStatusBar.SetPaneTextColor(valIndex, RGB(255, 255, 255));
//设置文本
m_wndStatusBar.SetPaneText(vecIndex, strVec);
m_wndStatusBar.SetPaneText(posIndex, strPos);
m_wndStatusBar.SetPaneText(valIndex, strVal);
return true;
}