MFC单文档设置状态栏颜色

        最近在处理关于MFC单文档的相关问题,在这里就一一的做一个总结,方便大家学习交流,也给自己留一个记录,方便后期回顾。下面进入正文:

        首先要知道状态栏的定义:CStatusBar,我在网上查过,可以使用CMFCStatusBar,对状态栏进行颜色,文字,高度等的设置,关于该类的说明很多,这里我就不多说。下面直接贴出我的使用结果。

结果显示:


头文件:

#pragma once
#include "afxext.h"
class CColorStatusBar : public CStatusBar
{
public:
	CColorStatusBar(void);
	~CColorStatusBar(void);

public:
	COLORREF* Color;
	CString* Text;

public:
	void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
	void SetPaneText(int nIndex, LPCTSTR lpszNewText, COLORREF crItemColor);

	DECLARE_MESSAGE_MAP()
};
cpp文件:
#include "StdAfx.h"
#include "ColorStatusBar.h"

CColorStatusBar::CColorStatusBar(void)
{
	Color = new COLORREF[8];
	Text = new CString[8];
}

CColorStatusBar::~CColorStatusBar(void)
{
	if (Color != NULL)
	{
		delete []Color;
	}

	if (Text != NULL)
	{
		delete []Text;
	}
}

BEGIN_MESSAGE_MAP(CColorStatusBar, CStatusBar)

END_MESSAGE_MAP()

void CColorStatusBar::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	//DRAWITEMSTRUCT 为需要自绘的控件或者菜单项提供了必要的信息

	//获取ID
	UINT unID= lpDrawItemStruct->itemID;
	CDC dc;
	//hDC附加到CDC对象
	dc.Attach(lpDrawItemStruct->hDC);
	//设置设备上下文对象的背景模式为
	dc.SetBkMode(TRANSPARENT);
	//lpDrawItemStruct->rcItem指定了将被绘制的矩形区域
	//创建一个矩形区域
	CRect rect(&lpDrawItemStruct->rcItem);
	//设置颜色 Color[unID]--根据ID传值设置颜色
	dc.SetTextColor(Color[unID]);
	//输出 Text[unID]根据ID传值设置文本
	dc.TextOut(rect.left+1, rect.top,Text[unID]);
	//分离DC
	dc.Detach();
}


void CColorStatusBar::SetPaneText(int nIndex, LPCTSTR lpszNewText, COLORREF crItemColor)
{
	//给数组赋值
	Text[nIndex] = lpszNewText;
	Color[nIndex]= crItemColor;
	//在一个状态条控件的给定部分中设置文本 SBT_OWNERDRAW| SBT_NOBORDERS -组合使用没有3D外观
	GetStatusBarCtrl().SetText("", nIndex,SBT_OWNERDRAW| SBT_NOBORDERS);  
}

你可能感兴趣的:(MFC)