加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

MFC状态栏字体与颜色的设置

(2015-10-08 13:15:03)
标签:

mfc

状态栏

分类: 编程点滴

编译环境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;
}

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有