半透明窗体的制作

原创 2000年10月23日 08:20:00
半透明窗体并不是Win2000的新特效,凡是用过金山词霸的同志都会发现在屏幕取词设置中有一个半透明背景的选项,这说明在Win98下是可以实现半透明窗口的。但我还是要首先谈谈在Win2000实现半透明窗体的新函数SetLayeredWindowAttributes。利用这个函数就可以轻松创建一个半透明窗体,但是利用这个函数的程序编译后在Win98下是无法运行的。 SetLayeredWindowAttributes API函数介绍如下: 函数功能:设置窗口透明颜色 参数:SetLayeredWindowAttributes( HWND hwnd, //窗口手柄 COLORREF crKey, //指定颜色值 BYTE bAlpha, //混合函数值 DWORD dwFlags //动作 参数解释: hwnd:窗口句柄。当使用CreateWindowEx函数创建窗口时,窗口由WS_EX_LAYERED指定的值创建;或者窗口已经创建后,由SetWindowLong根据WS_EX_LAYERED指定的值改变。 crKey:指向一个COLOR值,该值指定一个透明颜色值,当创建窗口时,窗口将使用该值。 bAlpha:混合函数值。该值用于描述窗口的不透明度。当bAlpha 值为0时,窗口完全透明,当bAlpha值为255时,窗口完全不透明。 dwFlags:指定动作。这个参数可以取一个或多个值。用它我们可以创建一个不规则的窗体。 SetLayeredWindowAttributes函数的API声明: SetLayeredWindowAttributes(hwnd: HWND; crKey: DWORD;bAlpha: BYTE; dwFlag: DWORD): Boolean; stdcall; ---------程序代码1: const WS_EX_LAYERED = $80000; LWA_COLORKEY = $1; LWA_ALPHA = $2; procedure TForm1.FormCreate(Sender: TObject); var l:longint; begin l :=getWindowLong(Handle, GWL_EXSTYLE); l := l Or WS_EX_LAYERED; SetWindowLong (handle, GWL_EXSTYLE, l); SetLayeredWindowAttributes(handle, 180, 120, LWA_ALPHA); end; 还有一些其它的常量定义如: AC_SRC_ALPHA = $1; AC_DST_NO_PREMULT_ALPHA = $10; ULW_COLORKEY = $1; ULW_ALPHA = $2; ULW_OPAQUE = $400; 等还要参看MSDN。有些我还没有搞明白,如果哪位同志知道的话,请告诉我。 那么在Win98下又是如何实现半透明窗体的呢?其基本原理是:在窗口显示前其获取背景图然后对背景图象进行滤镜效果处理再将处理过的背景图象显示在窗口前面。 有一种方法是:首先,做出一个透明窗体,然后在窗体上添加一个Shape,将其扩展至全屏幕,将Shape的Pen的Mode属性设为PmMask,Pen的Style属性设为PsClear,最后改变Brush的Color属性即可。 因为没有API支持,Win9x下只能模拟,效果不太好,就象金山词霸的取词窗口,背景改变而窗体上还是不变。但我们可以利用Timer控件来解决窗体的刷新率和时时更新的问题。 不过听说“金山词霸的半透明窗口效果只能在带MMX指令集的处理器中才起作用”不知是真是假,由于手头没有这样的电脑,还请同志们自己验证吧。

C# WINFORM 制作真正的 透明窗体 桌面画图 的完美解决方案

通过长时间研究终于找到关于在C# WINFORM下制作真正的透明窗体在系统桌面上画图的完美解决方案; 我的解决方案为两层透明窗体重叠,一层透明窗体showForm显示图像(TransparencyKe...
  • litongshun
  • litongshun
  • 2015年09月15日 14:31
  • 10309

Qt利用QPainter绘制心形以及Qt设置透明窗体的四种方法

在枯燥的编程生活中,有时候也需要自娱自乐,今天就利用Qt的QPainter绘制一颗桃心,虽然不怎么漂亮,但还是挺开心的! 下面是绘制心形的具体实现,一起来看看吧! #ifndef _FLOWER_H...
  • Andy_93
  • Andy_93
  • 2016年10月12日 22:56
  • 1862

一步一步实现WPF透明化窗口

这一篇教程讲述如何实现透明窗体和透明控件,在WindowStyle设置为none情况下拖拽窗口,半透明作为较容易实现的一种美观化,对于大多数美工较弱的开发者来说实用性不错,能在一些平面化设计场合发挥简...
  • u012388993
  • u012388993
  • 2017年03月12日 10:19
  • 2494

精彩编程与编程技巧-用VisualBasic制作半透明窗体...

  • 2009年10月08日 11:12
  • 2KB
  • 下载

c# 实现半透明渐显窗体

  • 2008年07月14日 20:18
  • 931KB
  • 下载

C#鼠标穿透半透明窗体

  • 2013年07月31日 21:28
  • 19KB
  • 下载

c# 实现半透明渐显窗体

  • 2010年02月22日 17:07
  • 952KB
  • 下载

Visual.C.程序开发范例宝典 半透明窗体 源代码

  • 2009年08月23日 19:30
  • 260KB
  • 下载

net半透明窗体示例

  • 2008年11月02日 11:15
  • 930KB
  • 下载

半透明窗体

  • 2014年03月14日 23:17
  • 198KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:半透明窗体的制作
举报原因:
原因补充:

(最多只允许输入30个字)