让CStatic控件根据自己的需要改变,文本,文本颜色,填充背景色

CStatic本身并不具备,改变颜色和背景色这个功能,如果只想实现这个功能,可以响应WM_CTLCOLOR消息。可以参加这里所说的做,http://www.vckbase.com/bbs/prime/viewprime.asp?id=558  现在我是想要让它根据自己选择的颜色而已改变,实现如下,

,新建一个类,让它继续CStatic类,添加自己的方法

class  CColorCStatic :  public  CStatic
{
    DECLARE_DYNAMIC(CColorCStatic)

public:
    CColorCStatic();
    
virtual ~CColorCStatic();
protected:
    afx_msg 
void OnPaint();

protected:
    DECLARE_MESSAGE_MAP()
protected
      CString m_strCaption; 
      COLORREF m_BackColor;
      COLORREF m_TextColor;
      
// Operations
public:
    
void SetTextColor( COLORREF TextColor ); 
    
void SetBackColor( COLORREF BackColor ); 
    
void SetCaption( CString strCaption );


public:
//    afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
}
;
这是头文件

cpp文件

 

#include  " stdafx.h "
#include 
" ColorCStatic.h "


//  CColorCStatic

IMPLEMENT_DYNAMIC(CColorCStatic, CStatic)

CColorCStatic::CColorCStatic()
{

}


CColorCStatic::
~ CColorCStatic()
{
}



BEGIN_MESSAGE_MAP(CColorCStatic, CStatic)
    ON_WM_PAINT()
//     ON_WM_RBUTTONDOWN()
END_MESSAGE_MAP()



//  CColorCStatic 消息处理程序



void  CColorCStatic::SetTextColor( COLORREF TextColor )
{
    m_TextColor 
= TextColor; //设置文字颜色
}


// 为CMultiColorStatic类添加“设置背景颜色”接口

void  CColorCStatic::SetBackColor( COLORREF BackColor )
{
    m_BackColor 
= BackColor; //设置背景颜色
}


// 为CMultiColorStatic类添加“设置标题”接口

void  CColorCStatic::SetCaption( CString strCaption )
{
    m_strCaption 
= strCaption;
}

void  CColorCStatic::OnPaint() 
{
    CPaintDC dc(
this); // device context for painting
    CRect rect;
    GetClientRect( 
&rect );
    CBrush BGBrush;
    BGBrush.CreateSolidBrush(m_BackColor);
    dc.SelectObject(
&BGBrush);
    dc.Rectangle(
&rect);
    dc.SetBkMode( TRANSPARENT );

    CFont 
*pFont=GetParent()->GetFont();//得到父窗体的字体
    CFont *pOldFont;
    pOldFont
=dc.SelectObject(pFont);//选用父窗体的字体
    dc.SetTextColor(m_TextColor);//设置文本颜色
    dc.DrawText(m_strCaption,&rect,DT_CENTER);//将文本画在Static的中央
    dc.SelectObject(pOldFont);
    
    BGBrush.DeleteObject();
}

这样具有改变,文本,文本颜色,填充背景色的CStatic派生类就建立好了,然后就在颜色对话框弹出后,做自己想做的事情了,

    CColorDialog colorDlg;
    colorDlg.m_cc.Flags 
|=  CC_RGBINIT  |  CC_FULLOPEN;
    colorDlg.m_cc.rgbResult 
=  m_firstColor;           
    
if (IDOK  ==  colorDlg.DoModal())
    
{
        CString m_strColorValue;
        m_firstColor 
= colorDlg.m_cc.rgbResult;         //得到颜色对话框返回值
        COLORREF color = colorDlg.GetColor();
        m_strColorValue.Format(
"%u, %u, %u ",GetRValue(color), GetGValue(color), GetBValue(color));
        m_Ico_TextColor.SetBackColor(m_firstColor);
        m_Ico_TextColor.SetCaption(m_strColorValue);
        m_Ico_TextColor.SetTextColor(RGB(
255255255));
        Invalidate(TRUE);         
    }
这里不知道怎么上传代码,如果有需要这个示例的代码的话,可以联系我,[email protected]

你可能感兴趣的:(让CStatic控件根据自己的需要改变,文本,文本颜色,填充背景色)