如何改变界面和非按钮控件的背景颜色

本文介绍如何使用MFC在Windows应用程序中自定义界面及非按钮控件的背景颜色。通过在构造函数中初始化画刷,并利用WM_CTLCOLOR消息响应函数OnCtlColor,能够灵活更改不同控件的背景颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

改变界面的背景颜色和改变非按钮控件的背景颜色的道理是一样的,都是在WM_CTLCOLOR消息的响应函数OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 中来改变画刷。

1.首先在构造函数(或者是OnInitDialog函数,负责初始化的函数,也就是在画刷被用到之前对画刷进行初始化都行)中初始化画刷:

CMyClass::CMyClass(CWnd* pParent/* = NULL*/)
 : CDialog(AutoSetup::IDD, pParent)
{
 //{{AFX_DATA_INIT(AutoSetup)
 //}}AFX_DATA_INIT 
 //设置背景色
 backColor = RGB(10, 160, 230);
 editBoxColor=RGB(255,255,255);
 buttonColor=RGB(10,50,230);
 m_backBrush.CreateSolidBrush(backColor);
 m_editBoxBrush.CreateSolidBrush(editBoxColor);
 m_buttonBrush.CreateSolidBrush(buttonColor);
}

2.添加消息映射,以使得有重画消息发出时可以到相应的函数里面执行我们想要的操作

 

BEGIN_MESSAGE_MAP(AutoSetup, CDialog)
 //{{AFX_MSG_MAP(AutoSetup)
 ON_WM_CTLCOLOR()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

 

3.在WM_CTLCOLOR消息的响应函数OnCtlColor(...)中随心所欲地改变画刷

HBRUSH CMyClass::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);//先将消息交给顶层的类去处理一下,处理完之后就轮到小弟类了
 
 // TODO: Change any attributes of the DC here
 pDC->SetBkMode(TRANSPARENT);                 //设置控件背景透明
 hbr=m_backBrush;             //创建背景刷子,不管三七得多少,先把画刷变成界面背景的画刷,这样可以使得除了特定控件之外其

//余控件的颜色均与背景颜色相同。
 switch(nCtlColor)
 {
 case CTLCOLOR_EDIT:
  // pDC->SetBkMode(TRANSPARENT);                 //设置控件背景透明
  hbr=m_editBoxBrush;             //创建背景刷子
  break;
 case CTLCOLOR_LISTBOX:
  //pDC->SetBkColor(buttonColor);
  hbr=m_editBoxBrush;             //创建背景刷子
  break;
 default:break;
 } 
 // TODO: Return a different brush if the default is not desired
 return hbr;//返回画刷
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值