有关透明窗口的显示

豆豆网   技术应用频道   2006年03月31日  【字号: 收藏本文

本文详细介绍有关透明窗口的显示

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

责编:豆豆技术应用

正在加载评论...