第1种
半透明窗口
//----------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
long lRt=GetWindowLong(Handle,GWL_EXSTYLE);
lRt=lRt|WS_EX_LAYERED;
SetWindowLong(Handle,GWL_EXSTYLE,lRt);
SetLayeredWindowAttributes(Handle,clBlue,200,LWA_ALPHA);
}
//-----------------------------------------------------------------
第2种
早就想写一篇我这方面的心得, 一直特忙没有空, 不过这次点名找我, 就不好再缩头缩脑了.
其实我也还有很多问题没有解决, 在这里也向高手请教.
此篇在V-Galaxy BBS发表, 如要转贴请和作者联系info@ministars.com
1. Windows 2000 的GDI+扩充集
Windows 2000内部扩充了原有的GDI指令集, 将直接提供高效的图像处理指令如Alpha Blending等. 在Win2000里有一个专门的窗口风格WS_EX_LAYERED提供透明窗口的可能. Win2000还提供如 AnimateWindow(...)一类的API, 直接支持窗口动画.
有关连接
http://www.microsoft.com/hwdev/video/GDInext.htm
http://x.wonder.ca/stevex/nthack/
2. Win95/NT下的实现方法
既然Windows不提供现成的, 就只好自己做了. 原则上是这么过程:
a. 获取桌面的DC,生成一个兼容的Bitmap,送一个WM_PAINT消息,把桌面取到Bitmap里.(就像一个Screen Capture)
b. 把自己要开的窗口画到另一幅Bitmap
c. 用这两幅图片做Alpha Blending, 或者其他效果, 生成第三幅图.
d. 最后再把图片BitBlt出来