<实现设置背景文本颜色,和字体的Font>

头文件:

#pragma once

#include "resource.h"
#include "afxwin.h"

class CMyEdit : public CEdit
{
    DECLARE_DYNAMIC(CMyEdit)
public:
    CMyEdit();
    virtual ~CMyEdit();

protected:
    DECLARE_MESSAGE_MAP()

public:
    void SetBackColor(COLORREF rgb);    //设置背景色
    void SetTextColor(COLORREF rgb);    //设置文本颜色
    void SetTextFont(const LOGFONT &lf);    //设置字体

    COLORREF GetBackColor(void)    //获取当前背景色
    {return m_crBackGnd;}

    COLORREF GetTextColor(void)    //获取当前文本色
    {return m_crText;}

    BOOL GetTextFont(LOGFONT &lf);    //获取当前字体

private:
    COLORREF m_crText;    //字体颜色
    COLORREF m_crBackGnd;    //背景色
    CFont m_font;
    CBrush m_brBackGnd;    //整个文本区的画刷

    //控制自己的消息反射函数CtlColor,绘制控件之前调用

    afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
};
View Code

 

cpp文件:

#include "stdafx.h"
#include "MyEdit.h"

IMPLEMENT_DYNAMIC(CMyEdit, CEdit)

CMyEdit::CMyEdit()
{
    //初始化为系统字体和颜色
    m_crText = GetSysColor(COLOR_WINDOWTEXT);
    m_crBackGnd = GetSysColor(COLOR_WINDOW);
    m_font.CreatePointFont(90, _T("宋体"));
    m_brBackGnd.CreateSolidBrush(GetSysColor(COLOR_WINDOW));
}

CMyEdit::~CMyEdit()
{}

BEGIN_MESSAGE_MAP(CMyEdit, CEdit)

//WM_CTLCOLOR的消息反射
ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()

//CMyEdit消息处理程序
void CMyEdit::SetBackColor(COLORREF rgb)
{
    //设置文字背景颜色
    m_crBackGnd = rgb;

    //释放旧的画刷
    if(m_brBackGnd.GetSafeHandle())
    {
        m_brBackGnd.DeleteObject();
    }

    //使用文字背景颜色创建新的画刷,使得文字框背景和文字背景一样
    m_brBackGnd.CreateSolidBrush(rgb);

    //redraw
    Invalidate(TRUE);
}

void CMyEdit::SetTextColor(COLORREF rgb)
{
    //设置文字颜色
    m_crText = rgb;
    //redraw
    Invalidate(TRUE);
}

void CMyEdit::SetTextFont(const LOGFONT &lf)
{
    //创建新的字体 并设置为CEDIT的字体
    if(m_font.GetSafeHandle())
    {
        m_font.DeleteObject();
    }

    m_font.CreateFontIndirectW(&lf);
    CEdit::SetFont(&m_font);

    //redraws
    Invalidate(TRUE);
}


BOOL CMyEdit::GetTextFont(LOGFONT &lf)
{
    if(m_font.GetLogFont(&lf) != 0)
        return TRUE;

    return FALSE;
}

HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
    //刷新前更改文本颜色
    pDC->SetTextColor(m_crText);
    //刷新前更改文本背景
    pDC->SetBkColor(m_crBackGnd);
    //返回画刷,用来绘制整个控件背景
    return m_brBackGnd;
}
View Code

 

posted on 2013-08-06 17:32  二师兄89  阅读(385)  评论(0)    收藏  举报