_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