找回密码
 加入
搜索
查看: 1840|回复: 6

[网络通信] 【已解决】关于_WinAPI_GetLayeredWindowAttributes的透明度设置问题

[复制链接]
发表于 2019-10-17 19:17:42 | 显示全部楼层 |阅读模式
本帖最后由 anythinging 于 2019-10-21 22:23 编辑

本地$ hGui = GUICreate(“ trans”,300,400,-1,-1,-1,$ WS_EX_LAYERED)

GUICtrlCreateLabel(“这是透明分层GUI上的文本” ,10,10,200,20 ,-1, $ GUI_WS_EX_PARENTDRAG)
$ iTransColor = 65793
$ iAlpha = 150
本地$ iInfo = _WinAPI_GetLayeredWindowAttributes($ hGui,$ iTransColor,$ iAlpha)


这个是从udf 中下载的实例,是用一个托动的方式调节方式的,对初学者来讲有难度。
请大神指点,怎么设置$ iAlpha值来简单实现?越简单越好,感谢!
发表于 2019-10-21 22:08:09 | 显示全部楼层
anythinging 发表于 2019-10-21 21:56
管用管用,而且非常容易理解,比示例好多了。感谢指点!
想问下如果实现背景色透明,就得用示例的代码了 ...
#include <WindowsConstants.au3>
#include <WinAPI.au3>

Local $gui = GUICreate("trans", 300, 400, -1, -1, -1, $WS_EX_LAYERED)
Local $layButt = GUICtrlCreateButton("Button", 10, 40, 40)
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($gui, 0xABCDEF, 200)
GUISetState()
While GUIGetMsg() <> -3
WEnd

评分

参与人数 1金钱 +30 收起 理由
floor6ggg + 30 很给力!

查看全部评分

发表于 2019-10-18 15:07:25 | 显示全部楼层
你这个是获取,设置是 …Set…
没特殊要求 WinSetTrans("标题", "文本", 透明度)
 楼主| 发表于 2019-10-19 14:43:41 | 显示全部楼层
感谢回复!
这个是示例
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

Local $gui = GUICreate("trans", 300, 400, -1, -1, -1, $WS_EX_LAYERED)
GUICtrlCreateLabel("This is text on a transparent Layered GUI", 10, 10, 200, 20, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetTip(-1, "Click label to drag layered window")
Local $layButt = GUICtrlCreateButton("Button", 10, 40, 40)
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($gui, 0x010101)
GUISetState()

Local $guicontrol = GUICreate("ControlGUI", 300, 400, 100, 100)
Local $checkTrans = GUICtrlCreateCheckbox("Transparent color 0xABCDEF (Checked) Or 0x010101", 10, 10)
Local $checkBorder = GUICtrlCreateCheckbox("POPUP-Style", 10, 30)
GUICtrlCreateLabel("Transparency for Layered GUI", 10, 50)
Local $slidTrans = GUICtrlCreateSlider(10, 70, 200, 30)
GUICtrlSetLimit($slidTrans, 255, 0)
GUICtrlSetData(-1, 255)
GUISetState()

While 1
    Local $extMsg = GUIGetMsg(1)
    Local $msg = $extMsg[0]
    Switch $extMsg[1]
        Case $guicontrol
            Select
                Case $msg = $GUI_EVENT_CLOSE
                    Exit
                Case $msg = $checkTrans Or $msg = $slidTrans

                    ; Change Attributes of Trans-Color and Window Transparency

                    If BitAND(GUICtrlRead($checkTrans), $GUI_CHECKED) = $GUI_CHECKED Then
                        _WinAPI_SetLayeredWindowAttributes($gui, 0xABCDEF, GUICtrlRead($slidTrans))
                    Else
                        _WinAPI_SetLayeredWindowAttributes($gui, 0x010101, GUICtrlRead($slidTrans))
                    EndIf

                Case $msg = $checkBorder
                    If BitAND(GUICtrlRead($checkBorder), $GUI_CHECKED) = $GUI_CHECKED Then
                        GUISetStyle($WS_POPUP, -1, $gui)
                    Else
                        GUISetStyle($GUI_SS_DEFAULT_GUI, -1, $gui)
                    EndIf
            EndSelect
        Case $gui
            Select
                Case $msg = $layButt
                    Local $transcolor, $alpha
                    Local $info = _WinAPI_GetLayeredWindowAttributes($gui, $transcolor, $alpha)
                    MsgBox(4096, 'Layered GUI', "Button on layered Window Clicked" & @CRLF & "Information about this window: " & @CRLF & _
                            "Transparent Color: " & $transcolor & @CRLF & _
                            "Alpha Value: " & $alpha & @CRLF & _
                            "LWA_COLORKEY: " & (BitAND($info, $LWA_COLORKEY) = $LWA_COLORKEY) & @CRLF & _
                            "LWA_ALPHA: " & (BitAND($info, $LWA_ALPHA) = $LWA_ALPHA))
                Case $msg = $GUI_EVENT_CLOSE
                    Exit MsgBox(4096, '', "Close from Layered GUI")
            EndSelect
    EndSwitch
WEnd

实现透明度是这句实现的,用msgbox看了$ iAlpha的值,大至是1-255,但手动设置$ iAlpha值 不生效,它好象是个其它类型的值,不知如何手动设置它的值
本地$ iInfo = _WinAPI_GetLayeredWindowAttributes($ hGui,$ iTransColor,$ iAlpha)
发表于 2019-10-21 20:10:54 | 显示全部楼层
舍近求远,给你说了试了没?
$gui = GUICreate("trans", 300, 400)
GUICtrlCreateButton("Button", 10, 40, 40)
WinSetTrans($gui, '', 150)
GUISetState()
While GUIGetMsg() <> -3
WEnd

评分

参与人数 1金钱 +30 收起 理由
anythinging + 30 &amp;lt;font style=&amp;quot;vertical-align: inh

查看全部评分

 楼主| 发表于 2019-10-21 21:56:56 | 显示全部楼层
afan 发表于 2019-10-21 20:10
舍近求远,给你说了试了没?

管用管用,而且非常容易理解,比示例好多了。感谢指点!
想问下如果实现背景色透明,就得用示例的代码了吧?
 楼主| 发表于 2019-10-21 22:22:20 | 显示全部楼层
感谢指点!透明的都示例理解起来比较容易,看来透明还是得用示例的方法。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 17:19 , Processed in 0.086050 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表