Hallo,
ich habe mal wieder ein Problem mit meinem Spiel. Unzwar wenn ich das Menü anzeigen lasse, ist es ja transparent und die Buttons auch, aber wenn ich nun die Buttons mit der Maus berühre, ist die Transparenz weg. Irgdenwie muss ich ja bei jedem neuzeichnen einmal GraphicsClear machen, aber am besten nur da wo sich auch der Button befindet. Wie stelle ich das am besten an?
-> Script starten und Pause-Taste drücken, dann kommt das Menü
Spoiler anzeigen
#include <Array.au3>
#include <GDIPlus.au3>
#include <GUIConstants.au3>
#include <Misc.au3>
#Include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $iMenuReturn
Global $aEnableForGo[4] ; [links, oben, rechts, unten]
Global $aTimer[6], $Hold[4]
Global $iCountPoints = 0
Global $iGuiWidth = 600
Global $iGuiHeight = 600
Global $iX = 0
Global $iY = 0
Global $iAngleStart = 20
Global $iAngleEnd = 320
Global $piewidth = 0
Global $pieheight = 320
Global $aSquarePos[4]
Global $aBG[12][12] = [[1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1], _
[0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0], _
[0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], _
[1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1], _
[1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1], _
[1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0], _
[1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1], _
[1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1], _
[0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1], _
[1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], _
[1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1], _
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]]
;~ Global $aBG[12][12] = [[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], _
;~ [0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], _
;~ [0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0], _
;~ [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], _
;~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], _
;~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], _
;~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], _
;~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], _
;~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], _
;~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], _
;~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], _
;~ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
Global $aPoints = $aBG
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{PAUSE}", "_MenuShow")
[/autoit] [autoit][/autoit] [autoit]$hDLL = DllOpen("user32.dll")
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate("PacMan made by m-obi", $iGuiWidth, $iGuiHeight)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUISetState()
_GDIPlus_Startup ()
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGuiWidth, $iGuiHeight, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$hBrush_Pac = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
$Brush1 = _GDIPlus_BrushCreateSolid(0xFFEEEEEE)
$Brush2 = _GDIPlus_BrushCreateSolid(0xFF000000)
$Brush3 = _GDIPlus_BrushCreateSolid(0xFF636363)
$Brush_Red = _GDIPlus_BrushCreateSolid(0xFFFF0000)
$Brush_Green = _GDIPlus_BrushCreateSolid(0xFF00FF00)
_SquarePos()
_BG()
_DrawPoints()
AdlibRegister("_SquarePos", 50)
AdlibRegister("_AniPacMan", 400)
While 1
Switch $iMenuReturn
Case 0
Opt("MouseCoordMode", 1)
Opt("GUIOnEventMode", 1)
HotKeySet("{PAUSE}", "_MenuShow")
_Time("start")
Case 1
_Exit()
EndSwitch
_CheckPoints()
[/autoit] [autoit][/autoit] [autoit]If TimerDiff($aTimer[1]) > 200 Then _Draw(1)
[/autoit] [autoit][/autoit] [autoit];ToolTip($aSquarePos[0] & @CRLF & $aSquarePos[1] & @CRLF & $aSquarePos[2] & @CRLF & $aSquarePos[3])
[/autoit] [autoit][/autoit] [autoit]If $aSquarePos[0] > 0.9 Then $aEnableForGo[0] = $aBG[Int($aSquarePos[1])][Int($aSquarePos[0]) - 1]
If $aSquarePos[1] > 0.9 Then $aEnableForGo[1] = $aBG[Int($aSquarePos[1]) - 1][Int($aSquarePos[0])]
If $aSquarePos[0] < 11 Then $aEnableForGo[2] = $aBG[Int($aSquarePos[1])][Int($aSquarePos[0]) + 1]
If $aSquarePos[1] < 11 Then $aEnableForGo[3] = $aBG[Int($aSquarePos[1]) + 1][Int($aSquarePos[0])]
_SquarePos()
[/autoit] [autoit][/autoit] [autoit]$aEnableForGo[0] = _Iif($aSquarePos[0] = 0.5 Or (Not $aEnableForGo[0] And StringRight($aSquarePos[0], 1) = 5), 0, 1)
$aEnableForGo[1] = _Iif($aSquarePos[1] = 0.5 Or (Not $aEnableForGo[1] And StringRight($aSquarePos[1], 1) = 5), 0, 1)
$aEnableForGo[2] = _Iif($aSquarePos[0] = 11.5 Or (Not $aEnableForGo[2] And StringRight($aSquarePos[0], 1) = 5), 0, 1)
$aEnableForGo[3] = _Iif($aSquarePos[1] = 11.5 Or (Not $aEnableForGo[3] And StringRight($aSquarePos[1], 1) = 5), 0, 1)
If Not _IsPressed("25", $hDLL) Then $Hold[0] = 0
If Not _IsPressed("26", $hDLL) Then $Hold[1] = 0
If Not _IsPressed("27", $hDLL) Then $Hold[2] = 0
If Not _IsPressed("28", $hDLL) Then $Hold[3] = 0
If StringRight($aSquarePos[0], 1) = 5 Then
Select
Case _IsPressed("26", $hDLL) And $aEnableForGo[1] ;oben
_Time("start")
If Not $Hold[1] Then $aTimer[3] = TimerInit()
$Hold[1] = 1
$iAngleStart = 290
$iY -= 10
_Draw()
While _IsPressed("26", $hDLL) And TimerDiff($aTimer[3]) < 300
Sleep(10)
WEnd
Case _IsPressed("28", $hDLL) And $aEnableForGo[3] ;unten
_Time("start")
If Not $Hold[3] Then $aTimer[5] = TimerInit()
$Hold[3] = 1
$iAngleStart = 110
$iY += 10
_Draw()
While _IsPressed("28", $hDLL) And TimerDiff($aTimer[5]) < 300
Sleep(10)
WEnd
EndSelect
EndIf
_SquarePos()
[/autoit] [autoit][/autoit] [autoit]If StringRight($aSquarePos[1], 1) = 5 Then
Select
Case _IsPressed("25", $hDLL) And $aEnableForGo[0] ;links
_Time("start")
If Not $Hold[0] Then $aTimer[2] = TimerInit()
$Hold[0] = 1
$iAngleStart = 200
$iX -= 10
_Draw()
While _IsPressed("25", $hDLL) And TimerDiff($aTimer[2]) < 300
Sleep(10)
WEnd
Case _IsPressed("27", $hDLL) And $aEnableForGo[2] ;rechts
_Time("start")
If Not $Hold[2] Then $aTimer[4] = TimerInit()
$Hold[2] = 1
$iAngleStart = 20
$iX += 10
_Draw()
While _IsPressed("27", $hDLL) And TimerDiff($aTimer[4]) < 300
Sleep(10)
WEnd
EndSelect
EndIf
WEnd
Func _Draw($iTyp = 0)
AdlibUnRegister("_SquarePos")
_GDIPlus_GraphicsSetSmoothingMode_New($hBuffer, 3)
_GDIPlus_GraphicsFillRect($hBuffer, Int($aSquarePos[0]) * 50, Int($aSquarePos[1]) * 50, 50, 50, $Brush1)
_GDIPlus_GraphicsFillRect($hBuffer, Int($aSquarePos[2]) * 50, Int($aSquarePos[3]) * 50, 50, 50, $Brush1)
If StringRight($aSquarePos[0], 1) = 5 And StringRight($aSquarePos[1], 1) = 5 And $aPoints[Int($aSquarePos[1])][Int($aSquarePos[0])] Then
$aPoints[Int($aSquarePos[1])][Int($aSquarePos[0])] = 0
$iCountPoints -= 1
EndIf
_GDIPlus_GraphicsSetSmoothingMode_New($hBuffer, 4)
If $aPoints[Int($aSquarePos[1])][Int($aSquarePos[0])] Then _GDIPlus_GraphicsFillEllipse($hBuffer, Int($aSquarePos[0]) * 50 + 15, Int($aSquarePos[1]) * 50 + 15, 20, 20, $Brush3)
If $aPoints[Int($aSquarePos[3])][Int($aSquarePos[2])] Then _GDIPlus_GraphicsFillEllipse($hBuffer, Int($aSquarePos[2]) * 50 + 15, Int($aSquarePos[3]) * 50 + 15, 20, 20, $Brush3)
AdlibRegister("_SquarePos", 50)
While 1
Switch $iTyp
Case 0
$iTyp = _Iif(TimerDiff($aTimer[1]) > 200, 1, 2)
Case 1
_GDIPlus_GraphicsFillPie($hBuffer, $iX + 2, $iY + 2, 46, 46, $iAngleStart, $iAngleEnd, $hBrush_Pac)
ExitLoop
Case 2
_GDIPlus_GraphicsFillPie($hBuffer, $iX + 2, $iY + 2, 46, 46, $iAngleStart - 15, $iAngleEnd + 30, $hBrush_Pac)
ExitLoop
EndSwitch
WEnd
_GDIPlus_GraphicsSetSmoothingMode_New($hBuffer, 3)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGuiWidth, $iGuiHeight)
EndFunc
Func _DrawPoints()
_GDIPlus_GraphicsSetSmoothingMode_New($hBuffer, 4)
If StringRight($aSquarePos[0], 1) = 5 And StringRight($aSquarePos[1], 1) = 5 Then $aPoints[Int($aSquarePos[1])][Int($aSquarePos[0])] = 0
For $y = 0 To UBound($aPoints) - 1
For $x = 0 To UBound($aPoints, 2) - 1
If $aPoints[$y][$x] Then
_GDIPlus_GraphicsFillEllipse($hBuffer, $x * 50 + 15, $y * 50 + 15, 20, 20, $Brush3)
$iCountPoints += 1
EndIf
Next
Next
_GDIPlus_GraphicsSetSmoothingMode_New($hBuffer, 3)
EndFunc
Func _AniPacMan()
_Draw(2)
$aTimer[1] = TimerInit()
EndFunc
Func _BG()
_GDIPlus_GraphicsFillRect($hBuffer, 0, 0, 600, 600, $Brush2)
For $y = 0 To UBound($aBG) - 1
For $x = 0 To UBound($aBG, 2) - 1
If $aBG[$y][$x] Then _GDIPlus_GraphicsFillRect($hBuffer, $x * 50, $y * 50, 50, 50, $Brush1)
Next
Next
EndFunc
Func _SquarePos()
$aSquarePos[0] = ($iX / 50) + 0.5
$aSquarePos[1] = ($iY / 50) + 0.5
Select
Case StringRight($aSquarePos[0], 1) = 5 And StringRight($aSquarePos[1], 1) = 5
$aSquarePos[2] = $aSquarePos[0]
$aSquarePos[3] = $aSquarePos[1]
Case StringRight($aSquarePos[0], 1) < 5 And StringRight($aSquarePos[1], 1) = 5
$aSquarePos[2] = $aSquarePos[0] - 1
$aSquarePos[3] = $aSquarePos[1]
Case StringRight($aSquarePos[0], 1) = 5 And StringRight($aSquarePos[1], 1) < 5
$aSquarePos[2] = $aSquarePos[0]
$aSquarePos[3] = $aSquarePos[1] - 1
Case StringRight($aSquarePos[0], 1) > 5 And StringRight($aSquarePos[1], 1) = 5
$aSquarePos[2] = $aSquarePos[0] + 1
$aSquarePos[3] = $aSquarePos[1]
Case StringRight($aSquarePos[0], 1) = 5 And StringRight($aSquarePos[1], 1) > 5
$aSquarePos[2] = $aSquarePos[0]
$aSquarePos[3] = $aSquarePos[1] + 1
EndSelect
EndFunc
Func _CheckPoints()
If $iCountPoints = 0 Then
MsgBox(0, "Test", "Test")
EndIf
EndFunc
Func _Time($sCommand)
Local Static $iTime
Switch $sCommand
Case "start"
If $aTimer[0] = "" Then $aTimer[0] = TimerInit()
Case "stop"
If $aTimer[0] <> "" Then
$iTime += TimerDiff($aTimer[0])
$aTimer[0] = ""
Return $iTime
EndIf
EndSwitch
EndFunc
Func _MenuShow()
_Time("stop")
Local $iWidth = 200
Local $iHeight = 300
Local $iRadius = 30
Local $iOffset = 3
Local $aButton[3]
Local $aHover[3] = [0, 0, 0]
Local $aPress[3] = [0, 0, 0]
Local $aPressed[3] = [0, 0, 0]
Local $aPressBefore[3] = [0, 0, 0]
HotKeySet("{PAUSE}")
GUISetState(@SW_DISABLE, $hGui)
Opt("GUIOnEventMode", 0)
$hGuiMenu = GUICreate("Menü", $iWidth + 6, $iHeight + 6, -1, -1, 0, $WS_EX_LAYERED)
;~ $hGuiMenu1 = GUICreate("", 80, 25, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST, $hGuiMenu)
;~ GUISetBkColor(0xF0F0F0)
;~ _WinAPI_SetLayeredWindowAttributes($hGuiMenu1, 0xF0F0F0)
;~ $hContinue = GUICtrlCreateButton("Weiter", 0, 0, 80, 25)
;~ WinSetTrans($hGuiMenu1, "", 180)
$hGraphicMenu = _GDIPlus_GraphicsCreateFromHWND($hGuiMenu)
$hBitmapMenu = _GDIPlus_BitmapCreateFromGraphics($iWidth + 6, $iHeight + 6, $hGraphicMenu)
$hBufferMenu = _GDIPlus_ImageGetGraphicsContext($hBitmapMenu)
$hScreenDC = _WinAPI_GetDC($hGuiMenu)
$hHBitmapMenu = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmapMenu)
$hDC = _WinAPI_CreateCompatibleDC($hScreenDC)
_WinAPI_SelectObject($hDC, $hHBitmapMenu)
; _WinAPI_UpdateLayeredWindow parameters
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", $iWidth + 6)
DllStructSetData($tSize, "Y", $iHeight + 6)
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", 0xFF)
DllStructSetData($tBlend, "Format", 1)
$tPoint = DllStructCreate($tagPOINT)
$pPoint = DllStructGetPtr($tPoint)
DllStructSetData($tPoint, "X", 0)
DllStructSetData($tPoint, "Y", 0)
$hBrush_BG = _GDIPlus_BrushCreateSolid(0xAAFFA500)
$hPen_BG = _GDIPlus_PenCreate(0xFF000000, 3)
_GDIPlus_GraphicsFillRect($hBufferMenu, $iOffset, $iRadius + $iOffset, $iRadius, $iHeight - $iRadius * 2, $hBrush_BG)
_GDIPlus_GraphicsFillPie($hBufferMenu, $iOffset, $iOffset, $iRadius * 2, $iRadius * 2, 180, 90, $hBrush_BG)
_GDIPlus_GraphicsFillRect($hBufferMenu, $iRadius + $iOffset, $iOffset, $iWidth - $iRadius * 2, $iRadius, $hBrush_BG)
_GDIPlus_GraphicsFillPie($hBufferMenu, $iWidth - $iRadius * 2 + $iOffset, $iOffset, $iRadius * 2, $iRadius * 2, 270, 90, $hBrush_BG)
_GDIPlus_GraphicsFillRect($hBufferMenu, $iWidth - $iRadius + $iOffset, $iRadius + $iOffset, $iRadius, $iHeight - $iRadius * 2, $hBrush_BG)
_GDIPlus_GraphicsFillPie($hBufferMenu, $iWidth - $iRadius * 2 + $iOffset, $iHeight - $iRadius * 2 + $iOffset, $iRadius * 2, $iRadius * 2, 0, 90, $hBrush_BG)
_GDIPlus_GraphicsFillRect($hBufferMenu, $iRadius + $iOffset, $iHeight - $iRadius + $iOffset, $iWidth - $iRadius * 2, $iRadius, $hBrush_BG)
_GDIPlus_GraphicsFillPie($hBufferMenu, $iOffset, $iHeight - $iRadius * 2 + $iOffset, $iRadius * 2, $iRadius * 2, 90, 90, $hBrush_BG)
_GDIPlus_GraphicsFillRect($hBufferMenu, $iRadius + $iOffset, $iRadius + $iOffset, $iWidth - $iRadius * 2, $iHeight - $iRadius * 2, $hBrush_BG)
_GDIPlus_GraphicsSetSmoothingMode_New($hBufferMenu, 4)
_GDIPlus_GraphicsDrawLine($hBufferMenu, $iOffset, $iHeight - $iRadius + $iOffset, $iOffset, $iRadius + $iOffset, $hPen_BG)
_GDIPlus_GraphicsDrawArc($hBufferMenu, $iOffset, $iOffset, $iRadius * 2, $iRadius * 2, 180, 90, $hPen_BG)
_GDIPlus_GraphicsDrawLine($hBufferMenu, $iRadius + $iOffset, $iOffset, $iWidth - $iRadius + $iOffset, $iOffset, $hPen_BG)
_GDIPlus_GraphicsDrawArc($hBufferMenu, $iWidth - $iRadius * 2 + $iOffset, $iOffset, $iRadius * 2, $iRadius * 2, 270, 90, $hPen_BG)
_GDIPlus_GraphicsDrawLine($hBufferMenu, $iWidth + $iOffset, $iRadius + $iOffset, $iWidth + $iOffset, $iHeight - $iRadius + $iOffset, $hPen_BG)
_GDIPlus_GraphicsDrawArc($hBufferMenu, $iWidth - $iRadius * 2 + $iOffset, $iHeight - $iRadius * 2 + $iOffset, $iRadius * 2, $iRadius * 2, 0, 90, $hPen_BG)
_GDIPlus_GraphicsDrawLine($hBufferMenu, $iRadius + $iOffset, $iHeight + $iOffset, $iWidth - $iRadius + $iOffset, $iHeight + $iOffset, $hPen_BG)
_GDIPlus_GraphicsDrawArc($hBufferMenu, $iOffset, $iHeight - $iRadius * 2 + $iOffset, $iRadius * 2, $iRadius * 2, 90, 90, $hPen_BG)
_GDIPlus_GraphicsSetSmoothingMode_New($hBufferMenu, 3)
$aButton[0] = _DrawButton($hBufferMenu, $hBitmapMenu, "Weiter", -1, 30, 120, 30, "Arial", 12)
$aButton[1] = _DrawButton($hBufferMenu, $hBitmapMenu, "Hilfe", -1, 80, 120, 30, "Arial", 12)
$aButton[2] = _DrawButton($hBufferMenu, $hBitmapMenu, "Beenden", -1, 150, 120, 30, "Arial", 12)
$hHBitmapMenu = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmapMenu)
_WinAPI_SelectObject($hDC, $hHBitmapMenu)
_WinAPI_UpdateLayeredWindow($hGuiMenu, $hScreenDC, 0, $pSize, $hDC, $pSource, 0, $pBlend, 2)
;~ GUISetState(@SW_SHOW, $hGuiMenu1)
GUISetState(@SW_SHOW, $hGuiMenu)
Opt("MouseCoordMode", 0)
[/autoit] [autoit][/autoit] [autoit]While 1
For $i = 0 To UBound($aButton) - 1
$sTextButton = DllStructGetData($aButton[$i], "Text")
$iLeftButton = DllStructGetData($aButton[$i], "Left")
$iTopButton = DllStructGetData($aButton[$i], "Top")
$iWidthButton = DllStructGetData($aButton[$i], "Width")
$iHeightButton = DllStructGetData($aButton[$i], "Height")
$iRadiusButton = DllStructGetData($aButton[$i], "Radius")
$aPos = MouseGetPos()
;ToolTip($aPos[0] & "|" & $aPos[1])
If ($aPos[0] - $iLeftButton - $iRadiusButton) ^ 2 / $iRadiusButton ^ 2 + ($aPos[1] - $iTopButton - $iRadiusButton) ^ 2 / $iRadiusButton ^ 2 <= 1 _
Or ($aPos[0] - $iLeftButton - $iWidthButton + $iRadiusButton) ^ 2 / $iRadiusButton ^ 2 + ($aPos[1] - $iTopButton - $iRadiusButton) ^ 2 / $iRadiusButton ^ 2 <= 1 _
Or ($aPos[0] - $iLeftButton - $iWidthButton + $iRadiusButton) ^ 2 / $iRadiusButton ^ 2 + ($aPos[1] - $iTopButton - $iHeightButton + $iRadiusButton) ^ 2 / $iRadiusButton ^ 2 <= 1 _
Or ($aPos[0] - $iLeftButton - $iRadiusButton) ^ 2 / $iRadiusButton ^ 2 + ($aPos[1] - $iTopButton - $iHeightButton + $iRadiusButton) ^ 2 / $iRadiusButton ^ 2 <= 1 _
Or ($aPos[0] > $iLeftButton And $aPos[0] < ($iLeftButton + $iWidthButton) And $aPos[1] > ($iTopButton + $iRadiusButton) And $aPos[1] < ($iTopButton + $iHeightButton - $iRadiusButton)) _
Or ($aPos[0] > ($iLeftButton + $iRadiusButton) And $aPos[0] < ($iLeftButton + $iWidthButton - $iRadiusButton) And $aPos[1] > $iTopButton And $aPos[1] < ($iTopButton + $iHeightButton)) Then
If _IsPressed("01") And Not $aPress[$i] And Not $aPressBefore[$i] Then
_DrawButton($hBufferMenu, $hBitmapMenu, $sTextButton, $iLeftButton, $iTopButton, $iWidthButton, $iHeightButton, "Arial", 12, 3)
$aPress[$i] = 1
$aPressed[$i] = 1
EndIf
If Not _IsPressed("01") Then
$aPressed[$i] = 0
$aPressBefore[$i] = 0
If $aPress[$i] Then
$aHover[$i] = 0
$aPress[$i] = 0
Switch $sTextButton
Case "Weiter", "Beenden"
_WinAPI_DeleteObject($hHBitmapMenu)
_GDIPlus_PenDispose($hPen_BG)
_GDIPlus_BrushDispose($hBrush_BG)
_WinAPI_DeleteDC($hDC)
_WinAPI_ReleaseDC($hGuiMenu, $hScreenDC)
_GDIPlus_GraphicsDispose($hBufferMenu)
_GDIPlus_BitmapDispose($hBitmapMenu)
$tSize = ""
$tSource = ""
$tBlend = ""
$tPoint = ""
Switch $sTextButton
Case "Weiter"
ConsoleWrite(@CRLF & "-- Weiter --")
$iMenuReturn = 0
Case "Beenden"
ConsoleWrite(@CRLF & "-- Beenden --")
$iMenuReturn = 1
EndSwitch
GUISetState(@SW_ENABLE, $hGui)
GUIDelete($hGuiMenu)
;~ GUIDelete($hGuiMenu1)
Return
Case "Hilfe"
ConsoleWrite(@CRLF & "-- Hilfe --")
EndSwitch
EndIf
EndIf
If Not $aHover[$i] And Not $aPress[$i] Then
_DrawButton($hBufferMenu, $hBitmapMenu, $sTextButton, $iLeftButton, $iTopButton, $iWidthButton, $iHeightButton, "Arial", 12, 2)
$aHover[$i] = 1
EndIf
Else
$aPressBefore[$i] = 0
If _IsPressed("01") Then
If Not $aPressed[$i] Then $aPressBefore[$i] = 1
Else
$aPressed[$i] = 0
EndIf
If $aHover[$i] Or $aPress[$i] Then
_DrawButton($hBufferMenu, $hBitmapMenu, $sTextButton, $iLeftButton, $iTopButton, $iWidthButton, $iHeightButton, "Arial", 12)
$aPress[$i] = 0
$aHover[$i] = 0
EndIf
EndIf
$hHBitmapMenu = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmapMenu)
_WinAPI_SelectObject($hDC, $hHBitmapMenu)
_WinAPI_UpdateLayeredWindow($hGuiMenu, $hScreenDC, 0, $pSize, $hDC, $pSource, 0, $pBlend, 2)
Next
Sleep(50)
;~ Switch GUIGetMsg()
;~ Case $hContinue
;~ _WinAPI_DeleteObject($hHBitmapMenu)
;~ _GDIPlus_PenDispose($hPen_BG)
;~ _GDIPlus_PenDispose($hPen_BG)
;~ _GDIPlus_BrushDispose($hBrush_BG)
;~ _WinAPI_DeleteDC($hDC)
;~ _WinAPI_ReleaseDC($hGuiMenu, $hScreenDC)
;~ _GDIPlus_GraphicsDispose($hBufferMenu)
;~ _GDIPlus_BitmapDispose($hBitmapMenu)
;~ $tSize = ""
;~ $tSource = ""
;~ $tBlend = ""
;~ $tPoint = ""
;~ GUISetState(@SW_ENABLE, $hGui)
;~ GUIDelete($hGuiMenu)
;~ GUIDelete($hGuiMenu1)
;~ Opt("MouseCoordMode", 1)
;~ Opt("GUIOnEventMode", 1)
;~ HotKeySet("{PAUSE}", "_MenuShow")
;~ _Time("start")
;~ Return
;~ EndSwitch
WEnd
EndFunc
Func _DrawButton($hGraphic, $hBitmap, $sText, $iLeft, $iTop, $iWidth, $iHeight, $sFont = "Arial", $iFontSize = 10, $iState = 1)
Local $iRadius = 10
Local $iWidthBitmap = _GDIPlus_ImageGetWidth($hBitmap)
Switch $iState
Case 1 ; normal
ConsoleWrite(@CRLF & $sText & " nicht hover")
Local $hBrush_BG = _GDIPlus_BrushCreateSolid(0xC8FFA500)
Case 2 ; hover
ConsoleWrite(@CRLF & $sText & " hover")
Local $hBrush_BG = _GDIPlus_BrushCreateSolid(0xC800FF00)
Case 3 ; pressed
ConsoleWrite(@CRLF & $sText & " gedrückt")
Local $hBrush_BG = _GDIPlus_BrushCreateSolid(0xC8FF0000)
EndSwitch
Local $hBrush_Text = _GDIPlus_BrushCreateSolid(0xFF000000)
Local $hPen = _GDIPlus_PenCreate(0xFF000000, 2)
Local $hFormat = _GDIPlus_StringFormatCreate()
Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, 0)
Local $tLayout = _GDIPlus_RectFCreate($iLeft, $iTop, 0, 0)
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sText, $hFont, $tLayout, $hFormat)
Local $iWidthText = Int(DllStructGetData($aInfo[0], "Width"))
Local $iHeightText = Int(DllStructGetData($aInfo[0], "Height"))
If $iLeft = -1 Then $iLeft = ($iWidthBitmap - $iWidth) / 2
[/autoit] [autoit][/autoit] [autoit]$tLayout = _GDIPlus_RectFCreate($iLeft + (($iWidth - $iWidthText) / 2), $iTop + (($iHeight - $iHeightText) / 2), 0, 0)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsFillRect($hGraphic, $iLeft, $iRadius + $iTop, $iRadius, $iHeight - $iRadius * 2, $hBrush_BG)
_GDIPlus_GraphicsFillPie($hGraphic, $iLeft, $iTop, $iRadius * 2, $iRadius * 2, 180, 90, $hBrush_BG)
_GDIPlus_GraphicsFillRect($hGraphic, $iRadius + $iLeft, $iTop, $iWidth - $iRadius * 2, $iRadius, $hBrush_BG)
_GDIPlus_GraphicsFillPie($hGraphic, $iWidth - $iRadius * 2 + $iLeft, $iTop, $iRadius * 2, $iRadius * 2, 270, 90, $hBrush_BG)
_GDIPlus_GraphicsFillRect($hGraphic, $iWidth - $iRadius + $iLeft, $iRadius + $iTop, $iRadius, $iHeight - $iRadius * 2, $hBrush_BG)
_GDIPlus_GraphicsFillPie($hGraphic, $iWidth - $iRadius * 2 + $iLeft, $iHeight - $iRadius * 2 + $iTop, $iRadius * 2, $iRadius * 2, 0, 90, $hBrush_BG)
_GDIPlus_GraphicsFillRect($hGraphic, $iRadius + $iLeft, $iHeight - $iRadius + $iTop, $iWidth - $iRadius * 2, $iRadius, $hBrush_BG)
_GDIPlus_GraphicsFillPie($hGraphic, $iLeft, $iHeight - $iRadius * 2 + $iTop, $iRadius * 2, $iRadius * 2, 90, 90, $hBrush_BG)
_GDIPlus_GraphicsFillRect($hGraphic, $iRadius + $iLeft, $iRadius + $iTop, $iWidth - $iRadius * 2, $iHeight - $iRadius * 2, $hBrush_BG)
_GDIPlus_GraphicsSetSmoothingMode_New($hGraphic, 4)
_GDIPlus_GraphicsDrawLine($hGraphic, $iLeft, $iHeight - $iRadius + $iTop, $iLeft, $iRadius + $iTop, $hPen)
_GDIPlus_GraphicsDrawArc($hGraphic, $iLeft, $iTop, $iRadius * 2, $iRadius * 2, 180, 90, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphic, $iRadius + $iLeft, $iTop, $iWidth - $iRadius + $iLeft, $iTop, $hPen)
_GDIPlus_GraphicsDrawArc($hGraphic, $iWidth - $iRadius * 2 + $iLeft, $iTop, $iRadius * 2, $iRadius * 2, 270, 90, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphic, $iWidth + $iLeft, $iRadius + $iTop, $iWidth + $iLeft, $iHeight - $iRadius + $iTop, $hPen)
_GDIPlus_GraphicsDrawArc($hGraphic, $iWidth - $iRadius * 2 + $iLeft, $iHeight - $iRadius * 2 + $iTop, $iRadius * 2, $iRadius * 2, 0, 90, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphic, $iRadius + $iLeft, $iHeight + $iTop, $iWidth - $iRadius + $iLeft, $iHeight + $iTop, $hPen)
_GDIPlus_GraphicsDrawArc($hGraphic, $iLeft, $iHeight - $iRadius * 2 + $iTop, $iRadius * 2, $iRadius * 2, 90, 90, $hPen)
_GDIPlus_GraphicsSetSmoothingMode_New($hGraphic, 3)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $tLayout, $hFormat, $hBrush_Text)
$hStruct = DllStructCreate("char Text[10]; int Left; int Top; int Width; int Height; int Radius")
DllStructSetData($hStruct, "Text", $sText)
DllStructSetData($hStruct, "Left", $iLeft)
DllStructSetData($hStruct, "Top", $iTop)
DllStructSetData($hStruct, "Width", $iWidth)
DllStructSetData($hStruct, "Height", $iHeight)
DllStructSetData($hStruct, "Radius", $iRadius)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush_Text)
_GDIPlus_BrushDispose($hBrush_BG)
Return $hStruct
EndFunc
Func _Exit()
_GDIPlus_BrushDispose($hBrush_Pac)
_GDIPlus_BrushDispose($Brush1)
_GDIPlus_BrushDispose($Brush2)
_GDIPlus_BrushDispose($Brush3)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
DllClose($hDLL)
Exit
EndFunc
Func _GDIPlus_GraphicsGetSmoothingMode_New($hGraphic)
Local $aResult = DllCall($ghGDIPDll, "int", "GdipGetSmoothingMode", "handle", $hGraphic, "int*", 0)
If @error Then Return SetError(@error, @extended, -1)
Return $aResult[2]
EndFunc ;==>_GDIPlus_GraphicsGetSmoothingMode_New
Func _GDIPlus_GraphicsSetSmoothingMode_New($hGraphic, $iSmooth)
Local $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "handle", $hGraphic, "int", $iSmooth)
If @error Then Return SetError(@error, @extended, False)
Return $aResult[0] = 0
EndFunc ;==>_GDIPlus_GraphicsSetSmoothingMode_New
Übrigens die grüne und rote Farbe sind nur Platzhalter, da kommen später andere Farben hin ;).