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类的应用