Welcome

首页 / 软件开发 / C++ / 关于透明窗口的显示

关于透明窗口的显示2008-01-05第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+扩充集

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出来