您的位置:首页 > 其它

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

2008-05-10 12:30 501 查看
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(255, 255, 255));


        Invalidate(TRUE);         


    }

这里不知道怎么上传代码,如果有需要这个示例的代码的话,可以联系我,monqinglu@163.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐