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