Функция _WinAPI_SetLayeredWindowAttributes

 ↑  ←  Описание функции


_WinAPI_SetLayeredWindowAttributes

Устанавливает атрибуты многослойного окна

#include <WinAPI.au3>
_WinAPI_SetLayeredWindowAttributes($hWnd, $i_transcolor [, $Transparency = 255 [, $dwFlags = 0x03 [, $isColorRef = False]]])

Параметры

$hwnd Дескриптор GUI-окна
$i_transcolor Цвет, который будет прозрачным
$Transparency [необязательный] Устанавливает прозрачность GUI
$dwFlags [необязательный] Флаги. (LWA_ALPHA=0x02, LWA_COLORKEY=0x01, по умолчанию 0x03)
$isColorRef [необязательный] Если True, то $i_transcolor как COLORREF( 0x00bbggrr ), иначе RGB-Color

Возвращаемое значение

Успех:Возвращает 1
Ошибка:Возвращает 0
@error:4 - функция не успешна - в @extended установлен _WinAPI_GetLastErrorMessage для получения подробной информации

См. также

_WinAPI_GetLayeredWindowAttributes, _WinAPI_GetLastError

См. также

Искать SetLayeredWindowAttributes в библиотеке MSDN

Пример

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WINAPI.au3>

$hGui = GUICreate("Тест прозрачности", 300, 400, -1, -1, -1, $WS_EX_LAYERED)
GUICtrlCreateLabel("Этот текст на прозрачном слое GUI", 10, 10, 200, 20, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetTip(-1, "Тяни за этот текст, чтобы перетащить многослойное окно")
$layButt = GUICtrlCreateButton("Кнопка", 10, 40, 40)
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hGui, 0x010101)
GUISetState()

$guicontrol = GUICreate("Управляющий GUI", 350, 400, 100, 100)
$checkTrans = GUICtrlCreateCheckbox("Цвет прозрачности 0xABCDEF (если отмечено) или 0x010101", 10, 10)
$checkBorder = GUICtrlCreateCheckbox("Стиль POPUP", 10, 30)
GUICtrlCreateLabel("Установка прозрачности многослойного GUI", 10, 70)
$slidTrans = GUICtrlCreateSlider(10, 90, 200, 30)
GUICtrlSetLimit($slidTrans, 255, 0)
GUICtrlSetData(-1, 255)
GUISetState()

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

                    ; Изменяет атрибуты прозрачного цвета и прозрачности окна

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

                Case $checkBorder
                    If BitAND(GUICtrlRead($checkBorder), $GUI_CHECKED) = $GUI_CHECKED Then
                        GUISetStyle($WS_POPUP, -1, $hGui)
                    Else
                        GUISetStyle($GUI_SS_DEFAULT_GUI, -1, $hGui)
                    EndIf
            EndSwitch
        Case $hGui
            Switch $extMsg[0]
                Case $layButt
                    Dim $transcolor, $alpha
                    $info = _WinAPI_GetLayeredWindowAttributes($hGui, $transcolor, $alpha)
                    MsgBox(4096, 'Многослойный GUI', "Информация об окне: " & @CRLF & _
                        "Цвет прозрачности: " & $transcolor & @CRLF & _
                        "Глубина прозрачности: " & $alpha & @CRLF & _
                        "LWA_COLORKEY: " & (BitAND($info, $LWA_COLORKEY) = $LWA_COLORKEY) & @CRLF & _
                        "LWA_ALPHA: " & (BitAND($info, $LWA_ALPHA) = $LWA_ALPHA))
                Case $GUI_EVENT_CLOSE
                    Exit MsgBox(4096, '', "Закрывает из многослойного GUI")
            EndSwitch
    EndSwitch
WEnd