У меня есть производный класс от CEdit
, и я хочу изменить цвет текста и фона.Я пытался с сообщениями ON_WM_CTLCOLOR_REFLECT
и ON_WM_CTLCOLOR
, но я никогда не получаю эти сообщения.Есть ли другая опция, кроме ON_PAINT
?
Вот как я инициализирую свой CColorEdit
элемент управления:
//in my dialog.h
CColorEdit m_test;
//in .cpp
DDX_Control(pDX, IDC_TEST, m_test);
Я не могу установить цвет вручную следующим образом:
m_test.SetTextColor(...);
Вот как я пытался справиться ON_WM_CTLCOLOR
:
BEGIN_MESSAGE_MAP(CColorEdit, CEdit)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
HBRUSH CColorEdit::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CEdit::OnCtlColor(pDC, pWnd, nCtlColor);
if (m_theme != 0)
{
pDC->SetTextColor(RGB(0, 255, 0));
}
return hbr;
}
Вот моя попытка с WM_CTLCOLOR_REFLECT
:
BEGIN_MESSAGE_MAP(CColorEdit, CEdit)
//{{AFX_MSG_MAP(CColorEdit)
ON_WM_CTLCOLOR_REFLECT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CColorEdit::SetTextColor(COLORREF textColor)
{
m_textColor = textColor;
Invalidate();
}
void CColorEdit::SetBkColor(COLORREF backgroundColor)
{
m_backgroundColor = backgroundColor;
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(backgroundColor);
Invalidate();
}
HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkColor(m_backgroundColor);
pDC->SetTextColor(m_textColor);
if (nCtlColor) // To get rid of compiler warning
nCtlColor += 0;
return hbr;
}
Thx.