之前在网上搜对话框透明的相关问题,很多人都推荐SetLayeredWindowAttributes函数,可以整体透明或者使用掩码透明部分。我估计它的原理就类似于先把整个窗体该怎么画就怎么画,然后去掉跟掩码相同的颜色。这就出现了一个问题:如果你想实现半透明的话就没辙了。举个例子
如上图,其中A是不透明的区域;B区域想达到的目的是:显示对话框后面的那片区域(即透明),但是在此基础上蒙灰;C是完全透明的区域。
选择一视同仁的方法肯定是不行的,所以似乎可以选择掩码的方式。于是我本打算用一个png图,图片也是窗口这么大,A不透明,B半透明,C透明。但是显示的时候一直都只有C透明,A、B都不透明了。我本来以为是图片问题,但是无论怎么改图都不行,于是我就有了以上对SetLayeredWindowAttributes工作原理的猜想,如此一来就都能解释了。
B区域本来是背景色,理应被刷透明,但是图片中的B画上去之后就改变了B的颜色,导致B跟背景色有区别了,所以B实现不了半透明,而是不透明。
说到这估计大家也明白我想干什么了,可有大神有解?