1) 在其父窗口中来处理CEdit
响应其父窗口的WM_CTRLCOLOR消息,然后通过其响应函数
OnCtlColor()来实现改变CEdit背景色的目的:
代码如下:
HBRUSH CMulEditView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CView::OnCtlColor(pDC, pWnd, nCtlColor);
CBrush m_brush;
m_brush.CreateSolidBrush(RGB(0,255,0));
if (pWnd-> GetDlgCtrlID() == 1) // ”1“ 是编辑框的ID号
{
pDC-> SetTextColor(StoreFontColor);
pDC-> SetBkMode(TRANSPARENT);
hbr = m_brush;
}
return hbr; // 注意被返回的颜色是控件的背景色
}
用这种方法是有一个缺陷的,因为编辑框的背景色最好由他自己来处理,这样
就不会出现代码分散的现象。
2)由该编辑控件自己来处理,
通过类向导来为该编辑控件添加WM_CTLCOLOR消息,在其响应函数中加以下代码:
HBRUSH CEditEx::CtlColor(CDC* pDC, UINT nCtlColor)
{
LOGBRUSH m_LogBrush;
m_BackBrush.GetLogBrush(&m_LogBrush); // 得到背景颜色的逻辑刷
pDC-> SetBkColor(m_LogBrush.lbColor); // 设置背景颜色
return HBRUSH(m_BackBrush); // 返回背景颜色
}
即可。
但是要注意
1: "m_BackBrush "必须是一个公有或是私有的数据成员,不能为局部变量。
2:不要为起父窗口,或者该编辑框自身响应OnEraseBkgnd()函数。
响应其父窗口的WM_CTRLCOLOR消息,然后通过其响应函数
OnCtlColor()来实现改变CEdit背景色的目的:
代码如下:
HBRUSH CMulEditView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CView::OnCtlColor(pDC, pWnd, nCtlColor);
CBrush m_brush;
m_brush.CreateSolidBrush(RGB(0,255,0));
if (pWnd-> GetDlgCtrlID() == 1) // ”1“ 是编辑框的ID号
{
pDC-> SetTextColor(StoreFontColor);
pDC-> SetBkMode(TRANSPARENT);
hbr = m_brush;
}
return hbr; // 注意被返回的颜色是控件的背景色
}
用这种方法是有一个缺陷的,因为编辑框的背景色最好由他自己来处理,这样
就不会出现代码分散的现象。
2)由该编辑控件自己来处理,
通过类向导来为该编辑控件添加WM_CTLCOLOR消息,在其响应函数中加以下代码:
HBRUSH CEditEx::CtlColor(CDC* pDC, UINT nCtlColor)
{
LOGBRUSH m_LogBrush;
m_BackBrush.GetLogBrush(&m_LogBrush); // 得到背景颜色的逻辑刷
pDC-> SetBkColor(m_LogBrush.lbColor); // 设置背景颜色
return HBRUSH(m_BackBrush); // 返回背景颜色
}
即可。
但是要注意
1: "m_BackBrush "必须是一个公有或是私有的数据成员,不能为局部变量。
2:不要为起父窗口,或者该编辑框自身响应OnEraseBkgnd()函数。