可以像静态文本框那样在OnCtlColor中修改文本编辑框的背景色,但是这样会出现一个问题,退格刷新不正常,出现重影。到目前没有找到好的办法解决,最后决定重载文本编辑框,自己处理ON_WM_CTLCOLOR_REFLECT。
派生类代码如下:
/// .h-----------
class CDrawEdit : public CEdit
{
DECLARE_DYNAMIC(CDrawEdit)
public:
CDrawEdit();
virtual ~CDrawEdit();
void SetBackground(COLORREF cr);
void SetFontColor(COLORREF cr);
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
protected:
CBrush m_brBackground; //背景画刷
COLORREF m_crBackground; //背景色
COLORREF m_crFont; //字体颜色
};
/// .cpp---------
CDrawEdit::CDrawEdit()
{
if (m_brBackground.GetSafeHandle())
{
m_brBackground.DeleteObject();
}
m_crBackground = RGB(255,255,255);
m_crFont = GetSysColor(COLOR_WINDOWTEXT);
m_brBackground.CreateSolidBrush(m_crBackground);
}
CDrawEdit::~CDrawEdit()
{
if (m_brBackground.GetSafeHandle())
{
m_brBackground.DeleteObject();
}
}
void CDrawEdit::SetBackground(COLORREF cr)
{
m_crBackground = cr;
if (m_brBackground.GetSafeHandle())
{
m_brBackground.DeleteObject();
}
m_brBackground.CreateSolidBrush(m_crBackground);
Invalidate(TRUE);
}
void CDrawEdit::SetFontColor(COLORREF cr)
{
m_crFont = cr;
Invalidate(TRUE);
}
BEGIN_MESSAGE_MAP(CDrawEdit, CEdit)
ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()
HBRUSH CDrawEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkColor(m_crBackground);
pDC->SetTextColor(m_crFont);
return m_brBackground;
}