_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