MFC---静态文本框重绘

MFC静态文本框重绘


不多说,直接上代码,不足的地方欢迎指正。

代码块

//
//作者:Vansix
//功能:重载CStatic,更改字体颜色
//版本:1.0
//修订:2017.09.08
//其他:
/
/


    class CVanStaticTxt : public CStatic
    {
    
    public:
    	CVanStaticTxt();
    	virtual~CVanStaticTxt();
    
    public:
    	// 设置文本颜色
    	void SetTextColor(COLORREF rgb);
    	// 设置背景颜色
    	void SetBackColor(COLORREF rgb);
    	// 设置显示文本
    	void SetText(CString text);
    	//设置字体
    	void SetTextFont(const LOGFONT &lf);
    
    
    public:
    	// 显示文本
    	CString m_DispText;
    
    ```
    	CRect   m_rectNCBottom;
    	CRect   m_rectNCTop;
    
    protected:
    
    	COLORREF m_crText;//字体的颜色
    	COLORREF m_crBackGnd;//字体的背景颜色
    	CFont    m_font;//字体
    	CBrush   m_brBackGnd;//整个文本区的画刷
    	//
    	afx_msg  HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
    	afx_msg  void OnPaint();
    
    protected:
    
    	DECLARE_MESSAGE_MAP()
    };
    
    
        // CVanStaticTxt.cpp
        
        
        CVanStaticTxt::CVanStaticTxt()
        {
        
        }
        
        CVanStaticTxt::~CVanStaticTxt()
        {
        
        }
        
        
        BEGIN_MESSAGE_MAP(CVanStaticTxt, CStatic)
        	ON_WM_PAINT()
        	ON_WM_CTLCOLOR_REFLECT()
        END_MESSAGE_MAP()
        
        
        
        // CVanEdit 消息处理程序
        
        HBRUSH CVanStaticTxt::CtlColor(CDC* pDC, UINT nCtlColor)
        {
        	//set text color
        	pDC->SetTextColor(m_crText);
        	//set the text's background color
        	pDC->SetBkColor(m_crBackGnd);
        	//return the brush used for background this sets control background
        	return m_brBackGnd;
        }
        
        void CVanStaticTxt::SetBackColor(COLORREF rgb)
        {
        	//设置文字背景颜色
        	m_crBackGnd = rgb;
        	//释放旧的画刷
        	if (m_brBackGnd.GetSafeHandle())
        		m_brBackGnd.DeleteObject();
        	//使用文字背景颜色创建新的画刷,使得文字框背景和文字背景一致
        	m_brBackGnd.CreateSolidBrush(rgb);
        	//redraw
        	Invalidate(TRUE);
        
        }
        
        void CVanStaticTxt::SetTextColor(COLORREF rgb)
        {
        	//set text color ref
        	m_crText = rgb;
        	//redraw
        	Invalidate(TRUE);
        }
        
        // 设置显示文本
        void CVanStaticTxt::SetText(CString text)
        {
        	SetWindowText(text);
        }
        
        void CVanStaticTxt::SetTextFont(const LOGFONT &lf)
        {
        	//创建新的字体
        	if (m_font.GetSafeHandle())
        	{
        		m_font.DeleteObject();
        	}
        	m_font.CreateFontIndirectA(&lf);
        	CVanStaticTxt::SetFont(&m_font);
        	//redraw
        	Invalidate(TRUE);
        }
        
        void CVanStaticTxt::OnPaint()
        {
    
    	CPaintDC dc(this); // device context for painting  
    	// Do not call CEdit::OnPaint() for painting messages  
    	CRect rect;
    	GetWindowRect(rect);
    	CRect rect2 = rect;
    	rect2.left += 2;
    	rect2.right -= 2;
    	rect2.top += 2;
    	rect2.bottom -= 2;
    
    	ScreenToClient(rect);
    	ScreenToClient(rect2);
    
    	CPen Pen;
    	Pen.CreatePen(PS_SOLID, 1, RGB(38, 168, 226));
    	dc.SelectObject(&Pen);
    	dc.RoundRect(&rect, CPoint(5, 5)); 
    	dc.RoundRect(&rect2, CPoint(5, 5)); 
    
    	CWindowDC dc2(this);
    	CBrush Brush(GetSysColor(COLOR_WINDOW));
    
    	dc2.FillRect(m_rectNCBottom, &Brush);
    	dc2.FillRect(m_rectNCTop, &Brush);
    
    	Invalidate();
    	Default();
    }







静态文本控件,功能如下 //功能:设置字体大小 //输入:lfHeight字体大小,单位为像素,不能为负数,当为0时表示采用系统默认大小 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextHeight(LONG lfHeight = 0); //功能:设置字体宽度 //输入:lfWidth字体宽度,单位为像素,不能为负数,当为0时表示采用系统默认大小 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextWidth(LONG lfWidth = 0); //功能:设置字体颜色 //输入:clrText字体颜色 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextColor(COLORREF clrText); //功能:设置字体粗细 //输入:lfWeight粗细的数值,范围为0-1000,当为0时表示默认 //输出:无 //注:内部已经刷新,当数值小于0或大于1000时,都自动设置为0,表示采用默认值 //王彬 20120710 void SetTextWeight(LONG lfWeight); //功能:设置字体是否为斜体 //输入:bItalic是否为斜体,true为斜体,false为非斜体 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextItalic(bool bItalic); //功能:设置字体指定每一行文本输出时相对于页面底端的角度。 //输入:lfEscapement以十分之一度为单位指定每一行文本输出时相对于页面底端的角度。 //输出:无 //注:内部已经刷新,逆时针为正,顺时针为负 //王彬 20120710 void SetTextEscapement(LONG lfEscapement); //功能:设置字体指定字符基线相对于页面底端的角度。 //输入:lfOrientation以十分之一度为单位指定字符基线相对于页面底端的角度。 //输出:无 //注:内部已经刷新,逆时针为正,顺时针为负 //王彬 20120710 void SetTextOrientation(LONG lfOrientation); //功能:设置字体是否带下划线。 //输入:bUnderline是否带下划线,true为带下划线,false为不带下划线。 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextUnderline(bool bUnderline); //功能:设置字体是否带删除线。 //输入:bUnderline是否带删除线,true为带删除线,false为不带删除线。 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextStrikeOut(bool bStrikeOut); //功能:设置字体名字。 //输入:sFaceName字体名字。 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextFaceName(CString sFaceName); //功能:设置字体字符集。 //输入:lfCharSet字体字符集,通常情况对于中文的Windows系统,也可以直接用DEFAULT_CHARSET表示默认字符集 // 英文字体可以用ANSI_CHARSET,简体中文字体可以用GB2312_CHARSET,繁体中文字体可以用CHINESEBIG5_CHARSET //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextCharSet(BYTE lfCharSet); //功能:字体样式采用系统默认 //输入:无 //输出:无 //注:内部已经刷新 //王彬 20120711 void SetTextDefault(); //功能:设置对齐方式 //输入:dwAlign对齐方式 ALIGN_LEFT 左对齐,ALIGN_RIGHT 右对齐,ALIGN_MIDDLE 水平居中对齐 //ALIGN_TOP 上对齐,ALIGN_BOTTOM 底对齐,ALIGN_VCENTER 垂直居中对齐, ALIGN_CENTER 水平垂直居中对齐 //输出:无 //注:内部已经刷新,垂直居中和底部对齐只能为一行 //王彬 20120711 void SetAlign(DWORD dwAlign); //功能:设置背景图片 //输入:sPicPath 图片路径, nMode为贴图方式 //输出:无 //注:内部已经刷新 //王彬 20120711 bool SetBKPicture(CString sPicPath, DWORD dwMode); //功能:设置背景是否贴图 //输入:bShow是否背景贴图, true为贴图, false为不贴图 //输出:无 //注:内部已经刷新 //王彬 20120711 bool ShowPicture(bool bShow); //功能:设置背景颜色 //输入:clrBK背景颜色 //输出:无 //注:内部已经刷新 //王彬 20120711 void SetBKColor(COLORREF clrBK); //功能:设置背景透明 //输入:无 //输出:无 //注:内部已经刷新 //王彬 20120711 void SetBKTransparent(); //功能:刷新背景 //输入:无 //输出:无 //王彬 20120712 void RedrawStatic(); //功能:制边框 //输入:nWidth边框宽度,clrBorder边框颜色 //输出:无 //王彬 20120714 void SetBorder(int nWidth, COLORREF clrBorder);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值