visual c++中静态文本控件(Static Text)
静态文本控件(Static Text)
1.概述
静态控件是用来显示一个文本串控件的。默认情况下,所有静态文本控件的ID都为IDC_STATIC,如果需要为静态文本控件添加消息处理函数,需要重新指定一个惟一的ID值。
编程时用得最多的就是静态文本控件,每一个静态控件都可以显示255个字符,如果有需要,读者也可以使用换行符“n”。
2.扩展的静态文本控件类
静态文本框足可以应付大多数应用程序开发的需要,但对于某些特殊的需要,就显得无能为力了。笔者对CStatic的原有功能进行扩展,新静态文本控件类支持透明、设置字体颜色等实用功能。
分析:
这两个问题可以利用OnPaint()函数来解决,OnPaint是WM_PAINT的消息响应函数,通过重载这个消息响应函数可以重新绘制静态文本。
类原型如下:
class CExpandStatic : public CStatic
{
public:
CExpandStatic();
void Transparence(bool bTran); //设置是否透明
void SetFontColor(COLORREF Color); //设置字体颜色
virtual ~CExpandStatic();
private:
bool m_Transparence; //记录是否透明的变量
COLORREF m_Color; //记录颜色的变量
};
Transparence函数和SetFontColor函数实际只是设置两个私有成员m_Transparence和m_Color的值,它们的实现如下:
void CExpandStatic::SetFontColor(COLORREF Color)
{
m_Color=Color;
}
void CExpandStatic::Transparence(bool bTran)
{
m_Transparence=Transparence;
}
为了达到背景透明及设置颜色的目的,必须重载消息响应函数OnPaint():
void CExpandStatic::OnPaint()
{
CPaintDC dc(this);
//设置字体
CFont* pfont;
pfont=this->GetFont();
dc.SelectObject(pfont);
dc.SetTextColor(m_Color); //设置字体颜色
if(m_Transparence==true)
dc.SetBkMode(TRANSPARENT); //背景透明
else
dc.SetBkMode(OPAQUE);
//重新绘制显示的文字
CRect StaticRect;
this->GetClientRect(&StaticRect);
CString sCaption;
this->GetWindowText(sCaption);
dc.DrawText(sCaption,&StaticRect,DT_LEFT|DT_WORDBREAK);
}
运行效果如图1所示。
图1 CExpandStatic类的应用