编译环境VS2010,基于单文档的VC工程,执行效果如下图所示:
http://s6/mw690/006bdz5Hzy6W2AZNAm935&690
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;
}
 
							
		 
						
		加载中,请稍候......