windows编程13-WM_CTLCOLORSTATIC

修改字体颜色和static的背景

当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息。如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄,Windows 会使用该画刷来绘制控件背景(子窗口背景)。

也就是说,改变 static 控件的背景颜色只有这一种方式,就是处理 WM_CTLCOLORSTATIC 消息。WM_CTLCOLORSTATIC 消息就是用来设置背景画刷的。
修改背景颜色:

case WM_CREATE:
		hSolidBrush = CreateSolidBrush(RGB(0, 100, 0));
		。。。
case WM_CTLCOLORSTATIC:
	{
		return (INT_PTR)hSolidBrush;  //这里必须返回画刷句柄

	}

结果:
在这里插入图片描述
修改文字背景颜色
上图中,我们的代码只是改变了控件的背景颜色(整个子窗口的背景颜色),却忽略了文字的背景颜色。

修改文字背景颜色使用 SetBkColor 函数,它的原型为:

COLORREF SetBkColor(
    HDC      hdc,  //设备环境句柄
    COLORREF crColor  //背景颜色
);

修改文字前景色(文字颜色)使用 SetTextColor 函数,它的原型为:

COLORREF SetTextColor(
    HDC      hdc,  //设备环境句柄
    COLORREF crColor  //背景颜色
);

这里我们修改的是 static 控件中的文本颜色,所以需要获取 static 控件的设备环境句柄。非常巧妙的是,发送 WM_CTLCOLORSTATIC 消息时,wParam 参数表示的就是 static 控件的设备环境句柄(lParam 表示控件句柄)。
请看部分代码:

case WM_CTLCOLORSTATIC:
	{
		HDC m_staticHdc = (HDC)wParam;
		SetTextColor(m_staticHdc, RGB(255, 255, 255));//白色字体
		SetBkColor(m_staticHdc, RGB(0,100,0));
		return (INT_PTR)hSolidBrush;  //这里必须返回画刷句柄

	}

结果:
在这里插入图片描述
透明背景
1.实现透明背景需要设置文本背景颜色透明
2.返回没有颜色的画刷。

  1. SetBkMode 函数可以用来设置文本的背景模式,它的原型为:
int SetBkMode(
    HDC hdc,  //设备环境句柄
    int iBkMode  //背景模式
);

BkMode 有下面两种取值:

取值说明
OPAQUE使用当前背景颜色来填充背景。
TRANSPARENT背景透明。
  1. GetStockObject (NULL_BRUSH); 语句可以返回没有颜色的画刷。
case WM_CTLCOLORSTATIC:
	{
		HDC m_staticHdc = (HDC)wParam;
		SetTextColor(m_staticHdc, RGB(255, 0, 0));
		SetBkMode(m_staticHdc,TRANSPARENT);
		return (INT_PTR)GetStockObject(NULL_BRUSH);  //这里必须返回画刷句柄

	}
		break;

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值