shaningning的专栏

水滴石穿,不是因为力量,而是因为坚持

MFC Tab背景颜色及窗体内控件背景颜色更改

整体效果图如下:

1、Tab标签页改变背景颜色

主要参照的是以下链接中的案例进行的修改,有需要的可以参考:http://download.csdn.net/detail/u014272404/9797785

2、最外层深色边框绘制

一、在对话框内增加OnPaint函数

二、在OnPaint函数内增加以下代码

代码内IDC_TAB_BASE为增加的Tab控件的ID

CRect rect;
GetDlgItem(IDC_TAB_BASE)->GetWindowRect(&rect);
ScreenToClient(&rect);
CBrush brush;
brush.CreateSolidBrush(RGB(97, 120, 140));
dc.SelectObject(&brush);
dc.RoundRect(rect.left-10, rect.top-10, rect.right+10, rect.bottom+10, 10, 10);
dc.FillSolidRect(rect.left, rect.top, rect.Width(), rect.Height(), GetSysColor(COLOR_BTNFACE));
 

3、Tab标签页的控件背景颜色修改

一、新建一个Dialog,类型为child,在其中加入以上图中的控件

二、用ClassWizard为新增加的对话框添加类

三、在头文件内添加以下变量

COLORREF m_color; //保存选择的颜色

四、为新建的Dialog添加WM_CTLCOLOR消息

五、修改新建Dialog背景色

在新建的Dialog类中增加自定义函数SetBackgroundColor(COLORREF m_brColor),设置m_color为自定义的颜色,

同时增加OnPaint函数,并在函数内增加以下代码,完成Tab Page页背景色修改

CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
CRect rClient;
GetClientRect(rClient);
dc.FillSolidRect(rClient, m_color);

六、在Cpp  OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)内增加以下代码

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO:  在此更改 DC 的任何属性
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(m_color);
hbr = ::CreateSolidBrush(m_color);
}
// TODO:  如果默认的不是所需画笔,则返回另一个画笔
return hbr;

七、触发OnCtlColor

在SetBackgroundColor(COLORREF m_brColor)函数内增加以下代码,完成重绘,主要是Invalidate(FALSE)

m_color = m_brColor;
Invalidate(FALSE);

颜色选择对话框直接调用CColorDialog类

至此,设置完毕!

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shaningning/article/details/72989163
文章标签: mfc 控件
个人分类: mfc
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

MFC Tab背景颜色及窗体内控件背景颜色更改

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭