OnEraseBkgnd()中默认调用基类(CFrameWnd)的OnEraseBkgnd(), 用窗口类中注册的Brush绘制背景。因此,绘制窗口背景时最好重写OnEraseBkgnd(),但后面不能调用基类OnEraseBkgnd()。两种方法设置背景,第一种调用OnEraseBkgnd,第二种调用Onctlcolor函数。下面的代码任选其一,都能实现下图:
BOOL C按钮背景Dlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rc;
GetClientRect(&rc);
pDC->FillSolidRect(&rc , RGB(0,255,255));
//return CDialogEx::OnEraseBkgnd(pDC);
return TRUE;
}
HBRUSH C按钮背景Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何特性
if(nCtlColor==CTLCOLOR_DLG)
{
//hbr = (HBRUSH)GetStockObject(WHITE_BRUSH); //改变返回的HBRUSH
//return m_brush;
}
return m_brush;
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
//return hbr;
}
这里有三种方法设置对话框背景,第一种返回WHITE_BRUSH画刷。第二种,用nCtlColor判断,第三种注释掉hbr两句代码,直接返回m_brush,第一二种不需要注释hbr,具体的你可以自己查查。同样nCtlColor不仅仅能够用来设置对话框样式,除了对话框之外其他的控件也能设置,具体的可以自己查查,在这里只讨论对话框。