以文本方式查看主题

-  搭建论坛  (http://bbs.diylsoft.com:8118/starforum/index.asp)
--  经验交流  (http://bbs.diylsoft.com:8118/starforum/list.asp?boardid=5)
----  [分享]窗口透明构件不透明实例(高手请绕行)  (http://bbs.diylsoft.com:8118/starforum/dispbbs.asp?boardid=5&id=18451)

--  作者:春林
--  发布时间:2008-6-25 18:55:21
--  [分享]窗口透明构件不透明实例(高手请绕行)

这个问题很久前就讨论过,但是没有很好的结果。其实搭建提供了对系统动态链接库的调用,那么很多功能就可以通过这个来实现,但是首先要知道该用哪个链接库,哪个函数,函数的具体参数都是什么含义等等。

今天有点时间,给大家发一个窗口背景透明而构件不透明的实例,下面有我的简要解说,这样更能使初学者明白为什么这样做,这个实例奉献给菜鸟族,因我也是菜鸟,知道菜鸟很希望知道实例的过程原因,所以写了说明。

对于高手这可能是班门弄斧,所以请高手们路过或绕行,仅以此帮助一下初学者,也说明搭建的可扩展性还很多。

这个实例首先要用到WINDOWS系统中的“User32”动态链接库中的4个API函数,先介绍一下这4个函数:

函数名称:GetForegroundWindow
动态链接库:user32
用途解释:获得当前活动窗口的句柄。返回值类型为整数型,即当前活动窗口的句柄。
参数说明:无参数

函数名称:GetWindowLongA
动态链接库:user32
用途解释:获得指定窗口的结构数据信息,什么叫"窗口的结构数据信息"?就是1个窗口的诸方面情况吧,象人有姓名性别年龄等一样,窗口有"扩展样式(包含标题栏,有标题栏缩小、无标题栏等的组合值)","样式(包含滚动条、系统菜单、边框等可设置)","父窗口","子窗口","窗口函数"等诸多方面,见下面nIndex参数值。这些方面的内容(每1方面只能有1个当前值)就构成了窗口的结构信息。
参数说明:

第一个参数(hWnd)整数型:窗口句柄及间接给出的窗口所属的窗口类。(即上一函数返回值赋值这里,决定获得哪个窗口的信息)
第二个参数(nIndex)整数型:欲取回此窗口哪方面的信息,可以是下述任何一个常数:

常量 属性值 说明
GWL_WNDPROC -4 为窗口过程设定一个新的地址
GWL_HINSTANCE -6 设置窗口句柄
GWL_HWNDPARENT -8 当前窗口的父窗口句柄
GWL_ID -12 设置窗口标识符
GWL_STYLE -16 设定窗口风格
GWL_EXSTYLE -20 设置窗口的扩展风格
GWL_USERDATA -21 设置与窗口有关的32位值,每一个窗口均有一个由创建该窗口的应用程序使用的32位值。当hWnd参数标识了一个对话框时,也可使用下面的DWL_DLGPROC、DWL_MSGRESULT和DWL_USER值
DWL_DLGPROC 4 设置对话框过程的新地址
DWL_MSGRESULT 0 设置在对话框过程中处理的消息的返回值
DWL_USER 8 设置的应用程序私有的新的额外信息,例如一个句柄或指针

函数名称:SetWindowLongA
动态链接库:user32
用途解释:常用此函数来动态地设置窗口的风格(如样式,滚动条等等)。即不在属性窗口中设置。而在API中设置。
参数说明:

第一个参数(hwnd)整数型:欲设置信息的窗口的句柄
第二个参数(nIndex)整数型:请参考GetWindowLongA函数的nIndex参数的说明
第三个函数(dwNewLong)整数型:由nIndex指定的窗口信息的新值

函数名称:SetLayeredWindowAttributes
动态链接库:user32
用途解释:用于设置个性特殊窗口的函数。
参数说明:

第一个参数(HWND hwnd)整数型:应用目标窗口句柄
  第二个参数(COLORREF crKey)整数型:掩码颜色,可以用RGB(r,g,b)来指定
  第三个参数(BYTE bAlpha):掩码颜色部分Alpha值,0是全透明,255是完全不透明
  第四个参数(DWORD dwFlags):透明方式

下面说一下实例的设计思路及过程:

1、窗口启动后,先置背景颜色与一个便于运算的数值。
2、将新的背景色存于变量X中,后面要用此运算。
3、利用“GetForegroundWindow”函数取出窗口句柄,因为后面的函数要用到这个窗口句柄。
4、利用“GetWindowLongA”函数取出窗口信息(扩展风格),后面的函数要用到这个信息。
5、将取出的信息值与“524288”进行“或”运算,这个是用于后面的函数设置新信息之用。
6、利用“SetWindowLongA”函数设置窗口新的信息。
7、利用“SetLayeredWindowAttributes”函数设置透明背景而构件不透明的窗口。

我介绍的比较简单,更深奥的函数说明请大家在网络上搜索一下相关的专业说明文档。


 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:





--  作者:roy78
--  发布时间:2008-6-25 20:42:48
--  

真的好开心,论坛似乎开始活跃起来了。希望会有更多,更好的的交流。另感谢楼主提供这么好的例子学习~~~


--  作者:FSJM
--  发布时间:2008-6-25 22:01:07
--  
非常不错,很有创意;应传到“搭建联盟”上保存,以便查找。

下次升级,将增加得到窗口句柄“方法”,以使调用API更简单一些。

--  作者:pc_doctor
--  发布时间:2008-6-28 9:04:45
--  
很高,很强,很霸道,很实用!图片点击可在新窗口打开查看
--  作者:洪滨
--  发布时间:2008-7-1 10:32:51
--  
非常感谢春林提供高超的实例,使星的动态连接功能更加灵活多样!
--  作者:wenti
--  发布时间:2010-1-3 19:56:53
--  

请问如何调节透明度呢

 


--  作者:rosn
--  发布时间:2010-1-3 20:55:40
--  
“星”的窗口属性中,都直接提供了,直接设置就可以。
--  作者:admin
--  发布时间:2010-1-3 23:22:32
--  
对,直接调节“窗口透明”属性即可。