这张图的缺陷,不用说,就是那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() 中修改代码为:
SetLayeredWindowAttributes (

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





