介绍一下实现常见的窗口透明效果的方法。
先介绍一种很简单的方法:
// 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程序会上传到优快云的资源里面,敬请期待。