当前位置:C++技术网 > 资讯 > OnEraseBkgnd,OnCtlColor实现对话框窗口背景的更换

OnEraseBkgnd,OnCtlColor实现对话框窗口背景的更换

更新时间:2016-01-19 20:19:03浏览次数:1+次

设置对话框背景颜色及背景图片可在OnCtlColor(),OnEraseBkgnd(),OnPaint()里设置,对话框初始化完毕,显示窗口时按顺序调用OnSize()>OnEraseBkgnd()>OnPaint()>OnCtlColor()。

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不仅仅能够用来设置对话框样式,除了对话框之外其他的控件也能设置,具体的可以自己查查,在这里只讨论对话框。