- Offizieller Beitrag
Hi,
ich hab gerade die neue Version 3.3.0.0 angeschaut und fand ein Winapi-Skript ganz interessant. Ich habe das Bsp. mal etwas entschlackt und leicht verändert.
Ergebnis ist eine nicht sichbare GUI - nur die Button werden angezeigt. Das Skript ist jetzt für GUI mit POPUP-Style angepaßt. Soll die Titelleiste angezeigt werden, müssen die Parts für die Systemmetrics wieder integriert werden (s. Bsp. bei _WinAPI_CreateRoundRectRgn).
Spoiler anzeigen
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Global $aButton[5]
[/autoit] [autoit][/autoit] [autoit]$gui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-170, -1, $WS_POPUP, $WS_EX_TOPMOST)
$aButton[0] = GUICtrlCreateButton("Button 1", 0, 0, 150)
$aButton[1] = GUICtrlCreateButton("Button 2", 0, 30, 150)
$aButton[2] = GUICtrlCreateButton("Button 3", 0, 60, 150)
$aButton[3] = GUICtrlCreateButton("Button 4", 0, 90, 150)
$aButton[4] = GUICtrlCreateButton("Exit", 0, 120, 150)
GUISetState(@SW_SHOW)
$pos = WinGetPos($gui)
_GuiHole($gui, 0, 0, 150, 150)
While 1
$msg = GUIGetMsg()
Switch $msg
Case $aButton[4]
ExitLoop
Case $aButton[0]
MsgBox(0, '', 'Button1 geklickt')
Case $aButton[1]
MsgBox(0, '', 'Button2 geklickt')
Case $aButton[2]
MsgBox(0, '', 'Button3 geklickt')
Case $aButton[3]
MsgBox(0, '', 'Button4 geklickt')
EndSwitch
WEnd
Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
Local $outer_rgn, $inner_rgn, $combined_rgn
$combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_DeleteObject($outer_rgn)
_WinAPI_DeleteObject($inner_rgn)
_AddCtrlRegion($combined_rgn, $aButton)
_WinAPI_SetWindowRgn($h_win, $combined_rgn)
EndFunc ;==>_GuiHole
Func _AddCtrlRegion($full_rgn, $ctrl_id)
Local $ctrl_pos, $ctrl_rgn
If IsArray($ctrl_id) Then
For $i = 0 To UBound($ctrl_id) -1
$ctrl_pos = ControlGetPos($gui, "", $ctrl_id[$i])
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
Next
Else
$ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
EndIf
EndFunc ;==>_AddCtrlRegion