GDI+ Buttons?

  • Hallo Leute,
    ich bin gerade dabei ein Quizscript, was ich morgen in der Schule brauche, zu bearbeiten.
    Es funktioniert alles, bis auf das Userinterface. Das wollte ich mit schicken Buttons machen.
    Ich sehe in vielen Progammen, wie in Doodle Jump, dass die Buttons mit GDI+ gemacht sind.
    Den Code verstehe ich leider nicht. Kann mir da jemand helfen?

    Jan

    o
    L_/
    | ||

    This ist janaiky. Copy janaiky into your signature to help him on the war to the Weltherrschaft.

  • Ich hoffe das ist einfacher zu verstehen ;).

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstants.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Beispiel", 400, 400)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(400, 400, $hGraphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

    [/autoit] [autoit][/autoit] [autoit]

    $hBrushBlack = _GDIPlus_BrushCreateSolid()
    $hBrushGray = _GDIPlus_BrushCreateSolid(0x0F000000)

    [/autoit] [autoit][/autoit] [autoit]

    $hCurBrush = $hBrushBlack

    [/autoit] [autoit][/autoit] [autoit]

    _ReDraw()

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_MouseEvent")
    GUISetOnEvent($GUI_EVENT_RESTORE, "WM_PAINT")

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_PAINT, "WM_PAINT")

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _ReDraw()
    _GDIPlus_GraphicsClear($hBuffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsFillRect($hBuffer, 50, 50, 100, 50, $hCurBrush)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, 400, 400)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _MouseEvent()
    $aMousePos = GUIGetCursorInfo($hWnd)
    If _PtIsInRect($aMousePos[0], $aMousePos[1], 50, 50, 100, 50) Then
    $hCurBrush = $hBrushGray
    _ReDraw()
    While _IsPressed("01")
    Sleep(20)
    WEnd
    $hCurBrush = $hBrushBlack
    _ReDraw()
    MsgBox(0,"","Button wurde gedrückt")
    WM_PAINT()
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _PtIsInRect($iXPoint, $iYPoint, $iXRect, $iYRect, $iWidthRect, $iHeightRect)
    If $iXPoint >= $iXRect And $iYPoint >= $iYRect And $iXPoint <= $iXRect + $iWidthRect And $iYPoint <= $iYRect + $iHeightRect Then Return 1
    Return 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_BrushDispose($hBrushBlack)
    _GDIPlus_BrushDispose($hBrushGray)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_PAINT()
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, 400, 400)
    EndFunc

    [/autoit]


    Ich überprüfe nur die Koordinaten des Klicks, bei DoodleJump wurde das auch nicht anders gemacht. :D