MFC 对话框 开启 Aero 毛玻璃 半透明 效果 (二)

本文介绍了如何在MFC对话框中实现Aero毛玻璃半透明效果,通过利用DWM(Desktop Window Manager)的特性,解决GDI不支持alpha通道的问题。文章提到,GDI的黑色被DWM误识别为透明,导致控件显示不清。为解决此问题,设置了WS_EX_LAYERED窗口属性,并定义了一个特定颜色作为透明色,同时调整DWM的边框扩展,最终展示出了改变透明色后的效果。
摘要由CSDN通过智能技术生成

 

这张图的缺陷,不用说,就是那2个按钮了。为什么会这样的呢?

因为 DWM 使用 alpha 通道来绘图。然而,诞生已久的 GDI 并不支持 alpha 通道。

想用 alpha 通道来绘图,必须使用 GDI+ 或者 WPF 这类先进的东东。

碰巧的是,GDI 里面的黑色 RGB(0, 0, 0) 和 DWM 的完全透明色 00000000 恰好是一样的。

于是,DWM 就把 GDI 的黑色当作了透明色。这就是为什么在前一个例子里面要把背景设为黑色的原因。

这样也带来一个负面效果:GDI 的控件,都是用黑色作为默认颜色的,现在成了透明色,当然会看不清楚了。

让我们改变一下,换个别的颜色作为透明色。(当然,这个颜色绝对不能在对话框中出现。)

 

首先要设置窗口具有 WS_EX_LAYERED 属性。可以修改资源或者调用 SetWindowLong() 实现。

有了这个属性,窗口就不能正常显示了,除非设置了透明色。

 

#define TRANSPARENT_COLOR     RGB (200, 201, 202)

 

在 OnInitDialog() 中修改代码为:

 

   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值