更改对话框子控件背景色的方法

本文介绍了如何通过响应WM_CTLCOLOR消息来设置控件的背景颜色。具体展示了如何使用全局或成员变量来创建画刷,并在特定控件上设置文本颜色及背景透明度。

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

响应WM_CTLCOLOR消息,在WM_CTLCOLOR消息响应函数中返回一个全局的或成员变量的颜色画刷,

该画刷就是作为背景色的画刷。如下:

HBRUSH CPreview3dCtlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	if(pWnd->GetDlgCtrlID()== IDC_TIPS)
	{
		pDC->SetTextColor(RGB(255,0,0));
		pDC->SetBkColor(RGB(0, 0, 0));//设置文本背景色
		pDC->SetBkMode(TRANSPARENT);//设置背景透明
	}

	return m_hBlackBrush;   // 不能为局部变量,否则函数返回时会析构,不会出现黑色背景
}

其中m_hBlackBrush是在构造函数中创建的黑色画刷,如下:

m_hBlackBrush = ::CreateSolidBrush(RGB(0, 0, 0));  

如果在OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)函数里面创建一个局部画刷,则不会出现黑色背景,如下:

HBRUSH CPreview3dCtlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
       hBlackBrush = ::CreateSolidBrush(RGB(0, 0, 0)); 
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	if(pWnd->GetDlgCtrlID()== IDC_TIPS)
	{
		pDC->SetTextColor(RGB(255,0,0));
		pDC->SetBkColor(RGB(0, 0, 0));//设置文本背景色
		pDC->SetBkMode(TRANSPARENT);//设置背景透明
	}

	return hBlackBrush ;   // 不能为局部变量,否则函数返回时会析构,不会出现黑色背景
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值