介绍一下实现常见的窗口透明效果的方法。
先介绍一种很简单的方法:
// Set WS_EX_LAYERED on this window
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
// Make this window 70% alpha
SetLayeredWindowAttributes(hwnd, 0, (255 * 70) / 100, LWA_ALPHA);
窗口必需有WS_EX_LAYERED属性才可以设置透明度。
此种做法是全窗口透明,就是说窗口上的所有控件,文字全部透明,这个效果也许不是我们想要的。

另一种复杂的方法:
实现窗口背景透明,窗口上的控件、文字等不被透明,这种方法要额外使用一个叠层窗口。
1. 先创建一个和目标窗口同样大小的叠层窗口,设置背景图片或者背景色,用方法1将其设置为透明。
2. 在此窗口上创建目标窗口覆盖它,目标窗口设置为无背景。
再一种复杂的方法:
这种效果也可以用UpdateLayeredWindow()来实现
Win7上特有的一种简单的实现方法:
借助Win7的新API DwmEnableBlurBehindWindow(), DwmExtendFrameIntoClientArea()。
一个介绍Win7桌面效果不错的文章 http://www.cnblogs.com/dflying/archive/2007/03/20/680921.html
http://weblogs.asp.net/kennykerr/archive/2006/08/10/Windows-Vista-for-Developers-_1320_-Part-3-_1320_-The-Desktop-Window-Manager.aspx(这个有空翻译一下)
完整的代码和DEMO程序会上传到CSDN的资源里面,敬请期待。
本文介绍了实现窗口透明效果的三种方法:简单方法、复杂方法和Win7特有方法。包括全窗口透明效果、窗口背景透明效果及借助DwmAPI实现的透明效果,并提供了完整代码和DEMO程序。
&spm=1001.2101.3001.5002&articleId=6662327&d=1&t=3&u=65240e4b9e8d41b8bf6901abc097b7f2)
1万+

被折叠的 条评论
为什么被折叠?



