Sergey2210
Осваивающий
- Сообщения
- 263
- Репутация
- 31
Версия AutoIt:3.
Описание:Как сделать определённую область окна полупрозрачной?
Пример с прозрачной областью:ПРЯМОУГОЛЬНИК
Пример с прозрачной областью:КРУГ
Описание:Как сделать определённую область окна полупрозрачной?
Пример с прозрачной областью:ПРЯМОУГОЛЬНИК
Код:
#include <GUIConstants.au3>
$gui = GUICreate("GUI", 500, 500)
_GUICreateInvRect($gui, 20, 150, 20, 200)
GUISetState()
While 1
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
Sleep(10)
Wend
Func _GUICreateInvRect($hwnd, $l, $t, $w, $h)
$pos = WinGetPos($hwnd)
$1 = 4
$2 = 4
$3 = $pos[2]
$4 = $t
$ret = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", $1, "long", $2, "long", $3, "long", $4)
$1 = 4
$2 = 0
$3 = $l
$4 = $pos[3]
$ret2 = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", $1, "long", $2, "long", $3, "long", $4)
$1 = $l + $w
$2 = 4
$3 = $pos[2]
$4 = $pos[3]
$ret3 = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", $1, "long", $2, "long", $3, "long", $4)
$1 = 4
$2 = $t + $h
$3 = $pos[2]
$4 = $pos[3]
$ret4 = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", $1, "long", $2, "long", $3, "long", $4)
DllCall("gdi32.dll", "long", "CombineRgn", "long", $ret[0], "long", $ret[0], "long", $ret2[0], "int", 2)
DllCall("gdi32.dll", "long", "CombineRgn", "long", $ret[0], "long", $ret[0], "long", $ret3[0], "int", 2)
DllCall("gdi32.dll", "long", "CombineRgn", "long", $ret[0], "long", $ret[0], "long", $ret4[0], "int", 2)
DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $hwnd, "long", $ret[0], "int", 1)
EndFunc
Пример с прозрачной областью:КРУГ
Код:
#include <GuiConstants.au3>
$my_gui = GUICreate("MyGUI", 392, 323)
_GuiHole($my_gui, 0, 0, 100)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;
EndSelect
WEnd
Exit
Func _GuiHole($h_win, $i_x, $i_y, $i_size)
Dim $pos, $outer_rgn, $inner_rgn, $wh, $combined_rgn, $ret
$pos = WinGetPos($h_win)
$outer_rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", 0, "long", 0, "long", $pos[2], "long", $pos[3])
If IsArray($outer_rgn) Then
$inner_rgn = DllCall("gdi32.dll", "long", "CreateEllipticRgn", "long", $i_x, "long", $i_y, "long", $i_x + $i_size, "long", $i_y + $i_size)
If IsArray($inner_rgn) Then
$combined_rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", 0, "long", 0, "long", 0, "long", 0)
If IsArray($combined_rgn) Then
DllCall("gdi32.dll", "long", "CombineRgn", "long", $combined_rgn[0], "long", $outer_rgn[0], "long", $inner_rgn[0], "int", 4)
$ret = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $combined_rgn[0], "int", 9)
If $ret[0] Then
Return 1
Else
Return 0
EndIf
Else
Return 0
EndIf
Else
Return 0
EndIf
Else
Return 0
EndIf
EndFunc ;==>_GuiHole