<实现设置背景文本颜色,和字体的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); };
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; }
浙公网安备 33010602011771号