刚写了个小软件,但是界面确实粗糙了一点,所以想美化一下,首先就是对话框的背景颜色。
这里介绍两种修改对话框背景颜色的方法:
方法一:重载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的重载*/
}