改变对话框的背景色

    刚写了个小软件,但是界面确实粗糙了一点,所以想美化一下,首先就是对话框的背景颜色。

这里介绍两种修改对话框背景颜色的方法:


方法一:重载OnPaint函数,即WM_PAINT消息的响应函数,在else之后添加以下代码:

void CxxxDlgDlg::OnPaint() 
{
if (IsIconic())
…
else
{
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景

CDialog::OnPaint();
}


方法二:重载OnCtlColor 函数,即WM_CTLCOLOR消息的响应函数:

首先,在对话框类的头文件中声明一个CBrush型的成员变量:

CBrush m_brush;
其次,在对话框的初始化函数OnInitDialog中调用CreateSolidBrush函数创建一个背景颜色的画刷

m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子

最后,在OnCtlColor 函数中返回这个画刷就行了:

HBRUSH CTraffic_MonitoringDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	
	return m_brush;

	// TODO: Return a different brush if the default is not desired
	return hbr;
}


另外,可以看到OnCtlColor 函数的参数有三个,这意味着这个函数的操作不仅仅只是返回一个背景画刷。通过对pWnd和pDC的操作,不仅可以改变对话框的背景色,同时也能改变对话框上控件的背景色和文字的颜色。如果改变只针对对话框或是某个控件,可以通过pDC或nCtlColor判断:

只针对对话框:

if(nCtlColor ==CTLCOLOR_DLG)
{
    return m_brush; //返加绿色刷子
}



只针对ID为IDC_LINE_STYLE的控件:

if (pWnd->GetDlgCtrlID()==IDC_LINE_STYLE)    /*如果控件的名称为IDC_LINE_STYLE*/
{
    pDC->SetTextColor(RGB(0,255,0)); /*将色彩容器中的文字颜色设置为绿色*/
    //pDC->SetBkMode(TRANSPARENT);   /*设置文字的背景为透明,否则文字背景认为系统默认色*/
    pDC->SetBkColor(RGB(255,0,0));   /*设置文字的背景色,注意如果写了上面句的话,背景色无效*/
    return m_brush;                  /*返回自定义的画刷句柄,这里注意虽然要求返回的是画刷的句柄,但是我们这里放置一个CBrush对象,不会出错。是因为CBrush有一个HBRUSH的重载*/
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值