我有一个对话框,其中禁用了编辑框,但文本应显示为红色而不是默认灰色。我尝试了以下方法:
void CMyEdit::OnEnable(BOOL bEnable)
{
CEdit::OnEnable(bEnable);
if (bEnable)
{
m_BackGroundColor = kRGBWhite;
}
else
{
m_BackGroundColor = kRGBDefaultGray;
}
m_TextColor = kRGBRed;
m_BackgroundBrush.DeleteObject();
m_BackgroundBrush.CreateSolidBrush(m_BackGroundColor);
Invalidate();
}
但它仍然只显示灰色的文字。但是如果删除基类调用CEdit::OnEnable(bEnable);
,则新文本颜色生效。任何人都可以解释代码中的错误吗?
感谢您的时间。
...欢呼声
编辑:(将我的评论移至编辑)抱歉,我忘记在原帖中提及。处理ON_WM_CTLCOLOR_REFLECT()而不是处理ON_WM_CTLCOLOR()。我不明白的是删除对基类的调用,将文本的颜色更改为指定的颜色,但保持仅将其更改为默认灰色。
答案 0 :(得分:2)
MSDN:非只读或禁用的编辑控件会在即将绘制控件时将WM_CTLCOLOREDIT消息发送到其父窗口。
推论是除了子类化它并自己做绘画之外,没有办法改变禁用(或只读)编辑框的背景或文本颜色。
答案 1 :(得分:1)
您需要处理OnCtlColor处理程序,并在您的消息地图中添加此ON_WM_CTLCOLOR()
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//logic here, change pDC as needed, return brush to use
}