Функция _WinAPI_GetLayeredWindowAttributes

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


_WinAPI_GetLayeredWindowAttributes

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

#include <WinAPI.au3>
_WinAPI_GetLayeredWindowAttributes($hWnd, ByRef $i_transcolor, ByRef $Transparency [, $asColorRef = False])

Параметры

$hwnd Дескриптор GUI-окна
$i_transcolor Переменная, в которую возвращается цвет прозрачности (dword в виде 0x00bbggrr или строка "0xRRGGBB")
$Transparency Переменная, в которую возвращается прозрачность GUI
$asColorRef [необязательный] Если True, то $i_transcolor в формате COLORREF( 0x00bbggrr ), иначе в формате RGB

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

Успех:Возвращает комбинацию LWA_ALPHA и LWA_COLORKEY (используйте BitAnd для проверки)
Ошибка:Возвращает 0
@error:от 1 до 3 - Ошибка вызова DllCall
4 - Функция не успешна
@extended:содержит _WinAPI_GetLastError()

Примечания

Минимальная OS - Windows XP.

См. также

_WinAPI_SetLayeredWindowAttributes, _WinAPI_GetLastError

См. также

Искать GetLayeredWindowAttributes в библиотеке 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