UnEpicFail
Новичок
- Сообщения
- 24
- Репутация
- 0
Доброго всем времени суток.
Возникла необходимость сделать окно программы, состоящее из нескольких слоев с различной и переменной прозрачностью. Создать такое окно оказалось не сложно, спасибо библиотеке WinAPIEx.au3, а вот управлять "фокусом" в этих слоях оказалось крайне сложно, сначала я узнал что полностью прозрачная часть объекта, является не "кликабельной", потом оказалось что если полностью видимый объект сделать прозрачным, а потом вернуть ему видимость он безвозвратно теряет фокус. К сожалению как победить последнюю описанную проблему я так и не придумал. Ниже приведен небольшой пример в котором есть 3 слоя:подложка, средний с практически прозрачной кнопкой и верхний с полностью непрозрачной кнопкой. Нажатие на практически прозрачную кнопку меняет прозрачность непрозрачной кнопки из слоя выше с непрозрачного на полностью прозрачный и обратно в зависимости от текущего состояния кнопки. После изменения прозрачности верхняя кнопка рас и навсегда теряет "фокус" и возможность быть нажатой.
Есть ли кто-нибудь кто подскажет как вернуть "фокус" верхней кнопке? Заранее спасибо.
Возникла необходимость сделать окно программы, состоящее из нескольких слоев с различной и переменной прозрачностью. Создать такое окно оказалось не сложно, спасибо библиотеке WinAPIEx.au3, а вот управлять "фокусом" в этих слоях оказалось крайне сложно, сначала я узнал что полностью прозрачная часть объекта, является не "кликабельной", потом оказалось что если полностью видимый объект сделать прозрачным, а потом вернуть ему видимость он безвозвратно теряет фокус. К сожалению как победить последнюю описанную проблему я так и не придумал. Ниже приведен небольшой пример в котором есть 3 слоя:подложка, средний с практически прозрачной кнопкой и верхний с полностью непрозрачной кнопкой. Нажатие на практически прозрачную кнопку меняет прозрачность непрозрачной кнопки из слоя выше с непрозрачного на полностью прозрачный и обратно в зависимости от текущего состояния кнопки. После изменения прозрачности верхняя кнопка рас и навсегда теряет "фокус" и возможность быть нажатой.
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#Include <WinAPIEx.au3>
Local $trans = False
Local $hDown = GUICreate('Layer', 800, 600, -1, -1)
Local $hMiddle = GUICreate('', 800, 600, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hDown)
GUISetBkColor(0xFFFFFF)
Local $transparentButton = GUICtrlCreateButton('',0,0,800,600,-1, $GUI_WS_EX_PARENTDRAG)
_WinAPI_SetLayeredWindowAttributes($hMiddle, 0xEEEEEE, 10)
Local $hUp = GUICreate('', 800, 600, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hDown)
GUISetBkColor(0xEEEEEE)
Local $pressMeButton = GUICtrlCreateButton("Press Me",375,275,50,50)
_WinAPI_SetLayeredWindowAttributes($hUp, 0xEEEEEE,255)
GUISetState(@SW_SHOW, $hDown)
GUISetState(@SW_SHOW, $hMiddle)
GUISetState(@SW_SHOW, $hUp)
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
Case $pressMeButton
MsgBox(0,'Press Me Button','Eeeee, Do It Again')
case $transparentButton
showHide()
EndSwitch
WEnd
func showHide()
if ($trans) Then
_WinAPI_SetLayeredWindowAttributes($hUp, 0xEEEEEE,255)
$trans = False
Else
_WinAPI_SetLayeredWindowAttributes($hUp, 0xEEEEEE,0)
$trans = True
EndIf
EndFunc
Есть ли кто-нибудь кто подскажет как вернуть "фокус" верхней кнопке? Заранее спасибо.