如上图,其中A是不透明的区域;B区域想达到的目的是:显示对话框后面的那片区域(即透明),但是在此基础上蒙灰;C是完全透明的区域。
选择一视同仁的方法肯定是不行的,所以似乎可以选择掩码的方式。于是我本打算用一个png图,图片也是窗口这么大,A不透明,B半透明,C透明。但是显示的时候一直都只有C透明,A、B都不透明了。我本来以为是图片问题,但是无论怎么改图都不行,于是我就有了以上对SetLayeredWindowAttributes工作原理的猜想,如此一来就都能解释了。
B区域本来是背景色,理应被刷透明,但是图片中的B画上去之后就改变了B的颜色,导致B跟背景色有区别了,所以B实现不了半透明,而是不透明。
说到这估计大家也明白我想干什么了,可有大神有解?
6 个解决方案
#1
可以半透明.
在XP下唯一方法:给窗口加上WS_EX_LAYERED样式,使用Gdiplus画出图片,然后UpdateLayeredWindow
参考: http://blog.csdn.net/cometnet/article/details/6561912
http://blog.csdn.net/cometnet/article/details/6969019
VISTA/WIN7多一个选择: 使用DWM实现Aero Glass效果
sign -----------------------------------------------------------------------
在XP下唯一方法:给窗口加上WS_EX_LAYERED样式,使用Gdiplus画出图片,然后UpdateLayeredWindow
参考: http://blog.csdn.net/cometnet/article/details/6561912
http://blog.csdn.net/cometnet/article/details/6969019
VISTA/WIN7多一个选择: 使用DWM实现Aero Glass效果
sign -----------------------------------------------------------------------
#2
沙发说的对UpdateLayeredWindow
这个函数可以半透明 。。但是都需要自己画
这个函数可以半透明 。。但是都需要自己画
#3
刚刚试了一下UpdateLayeredWindow,出现了两个问题,一是不响应鼠标事件了,即使是标题栏;二是图片显示出问题了,给人的感觉就是对话框的内容跟对话框背后的背景出现了对应像素值相加的情况,不知道是不是因为我的png图片是8位的……
#4
说实在的,这种方式有点难以驾驭啊~
#5
#6
我把你的代码修改了一下,然后用8位的png图片替代你的图片,发现能正常显示,所以现在我打算学习一下你的代码来实现那个效果,感谢~结贴给分~
#1
可以半透明.
在XP下唯一方法:给窗口加上WS_EX_LAYERED样式,使用Gdiplus画出图片,然后UpdateLayeredWindow
参考: http://blog.csdn.net/cometnet/article/details/6561912
http://blog.csdn.net/cometnet/article/details/6969019
VISTA/WIN7多一个选择: 使用DWM实现Aero Glass效果
sign -----------------------------------------------------------------------
在XP下唯一方法:给窗口加上WS_EX_LAYERED样式,使用Gdiplus画出图片,然后UpdateLayeredWindow
参考: http://blog.csdn.net/cometnet/article/details/6561912
http://blog.csdn.net/cometnet/article/details/6969019
VISTA/WIN7多一个选择: 使用DWM实现Aero Glass效果
sign -----------------------------------------------------------------------
#2
沙发说的对UpdateLayeredWindow
这个函数可以半透明 。。但是都需要自己画
这个函数可以半透明 。。但是都需要自己画
#3
刚刚试了一下UpdateLayeredWindow,出现了两个问题,一是不响应鼠标事件了,即使是标题栏;二是图片显示出问题了,给人的感觉就是对话框的内容跟对话框背后的背景出现了对应像素值相加的情况,不知道是不是因为我的png图片是8位的……
#4
说实在的,这种方式有点难以驾驭啊~
#5
1.鼠标事件是没问题的,你可以参考我发的源码
2.PNG最好是32位的
sign -----------------------------------------------------------------------
#6
我把你的代码修改了一下,然后用8位的png图片替代你的图片,发现能正常显示,所以现在我打算学习一下你的代码来实现那个效果,感谢~结贴给分~