GDI+ Hauptmenü

  • Nach langer Zeit in dem ziemlich viel gut gelaufen ist,
    und relativ viele Projekte für mich abgeschlossen sind,
    Habe ich mal wieder ein Problem, dieses mal mit GDI's:

    In einem Hauptmenü, das mit GDI+ gemacht ist,
    wird das Bild für einen neuen Menüteil einfach nicht geladen,
    wenn man auf den dafür vorgesehenden Button klickt.

    Spoiler anzeigen
    [autoit]


    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include

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

    Opt("GuiOnEventMode", 1)
    OnAutoItExitRegister("CleanOnExit")

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

    Global Const $Width = 480
    Global Const $Height = 320

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

    Global $ii = 1
    Global Enum $ST_main_menu = 0, $ST_playing, $ST_paused, $ST_game_over, $ST_enter_score, $ST_scores, $ST_options, $ST_pause_menu, $ST_intro, $ST_stats
    Global $iStatus = $ST_main_menu

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

    #region Sounddef
    ;Global $Soundname = _SoundOpen()
    #endregion

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

    #region gui
    $GUI1 = GUICreate("Run!", $Width, $Height, -1, -1, BitOR($WS_POPUP, $WS_SYSMENU, $WS_MINIMIZEBOX, $WS_BORDER))
    GUISetOnEvent($GUI_EVENT_CLOSE, "ende")

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

    #endregion

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

    #region gdi
    _GDIPlus_Startup()
    $MainPlayer = _GDIPlus_ImageLoadFromFile(@scriptdir & "\Images\Player2.gif")
    $MainHintergrund = _GDIPlus_ImageLoadFromFile(@scriptdir & "\Images\Hintergrundmain.jpg")
    $OptHintergrund = _GDIPlus_ImageLoadFromFile(@scriptdir & "\Images\OptHintergrund.jpg")

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

    $Graphic = _GDIPlus_GraphicsCreateFromHWND($GUI1)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $Graphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    #endregion

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

    GUISetState(@sw_show)

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

    While 1
    Sleep(20)
    Switch $iStatus
    Case $ST_main_menu
    $iStatus = Draw_Main()
    Case $ST_playing
    $iStatus = Draw_Playing()
    Case $ST_options
    $iStatus = Draw_Options()
    Case $ST_intro
    $iStatus = Draw_Intro()
    Case $ST_stats
    $iStatus = Draw_stats()
    EndSwitch

    WEnd

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

    Func Draw_Main()

    _GDIPlus_GraphicsDrawImageRect($hBuffer, $MainHintergrund, 0, 0, $Width, $Height) ; Hier funktioniert es perfekt....
    _GDIPlus_GraphicsDrawImageRect($Graphic, $hBitmap, 0, 0, $Width, $Height)

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

    Local $Mouseposmain = GUIGetCursorInfo($GUI1)
    If _IsPressed(01) Then
    Select
    Case $Mouseposmain[0] > 246 And $Mouseposmain[0] < 430 And $Mouseposmain[1] > 16 And $Mouseposmain[1] < 61
    Return $ST_playing
    Case $Mouseposmain[0] > 246 And $Mouseposmain[0] < 430 And $Mouseposmain[1] > 184 And $Mouseposmain[1] < 226
    Return $ST_options
    Case $Mouseposmain[0] > 246 And $Mouseposmain[0] < 430 And $Mouseposmain[1] > 72 And $Mouseposmain[1] < 116
    Return $ST_intro
    Case $Mouseposmain[0] > 246 And $Mouseposmain[0] < 430 And $Mouseposmain[1] > 129 And $Mouseposmain[1] < 172
    Return $ST_stats
    Case $Mouseposmain[0] > 246 And $Mouseposmain[0] < 430 And $Mouseposmain[1] > 260 And $Mouseposmain[1] < 289
    ende()
    EndSelect
    EndIf

    EndFunc

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

    Func Draw_Options()
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $MainHintergrund, 0, 0, $Width, $Height) ;...Selber Aufbau wie oben, aber das Bild wechselt nicht...
    _GDIPlus_GraphicsDrawImageRect($Graphic, $hBitmap, 0, 0, $Width, $Height)

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

    EndFunc

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

    Func Draw_Playing()
    EndFunc

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

    Func Draw_Intro()

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

    EndFunc

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

    Func Draw_stats()
    EndFunc

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

    Func Draw_Pause()
    EndFunc

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

    Func Draw_GameOver()
    EndFunc

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

    Func ende()
    Exit
    EndFunc

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

    Func CleanOnExit()
    _GDIPlus_ImageDispose($OptHintergrund)
    _GDIPlus_ImageDispose($MainHintergrund)
    _GDIPlus_ImageDispose($MainPlayer)
    _GDIPlus_GraphicsDispose($Graphic)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()

    EndFunc

    [/autoit]

    Da ich nicht allzu viele Erfahrungen mit GDI's bisher gemacht habe,
    bin ich mit diesem Projekt angefangen.
    Als Grundbaustein hat mir dabei das Doodle Jump Projekt geholfen,
    wie einige von euch sicher nicht unschwer erkennen können...
    u.a. deswegen auch so viele includes...
    ich hab's immer noch nicht drauf, welche ich raushauen kann...-.-

    Vielen Dank im Vorraus

    2 Mal editiert, zuletzt von Buckiuxx (5. Juli 2010 um 21:49) aus folgendem Grund: 2. Problem Aufgetreten...

  • so gehts :D
    man muss natürlich auch n anderes bild zeichen :rofl:

    [autoit]

    Func Draw_Options()
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $OptHintergrund, 0, 0, $Width, $Height) ;...Selber Aufbau wie oben, aber das Bild wechselt nicht...
    _GDIPlus_GraphicsDrawImageRect($Graphic, $hBitmap, 0, 0, $Width, $Height)
    Return $ST_options
    EndFunc

    [/autoit]
  • Du Glaubst nicht wie dankbar ich dir bin^^

    Ich dachte schon wirklich in alle Richtungen,
    ob das mit Return zB nicht klappt, ob die GDI falsch wär etc...

    Danke, dein recht einfacher Tipp hat mir echt mein seelisches Wohlbefinden wieder gegeben :D

    1000x Danke!!!

  • Ich habe ein wenig weiter geschrieben,
    und ich komm nicht mit dem Return klar...

    Egal wo man Hinklickt, es wird an diesem Bildschirm wieder $ST_main_menu return't.


    Spoiler anzeigen

    Das selbe Script wie gerade...
    das Hier hinzugefügt:

    [autoit]

    Func Draw_Options()
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $OptHintergrund, 0, 0, $Width, $Height)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $hBitmap, 0, 0, $Width, $Height)


    Local $Mouseposmain = GUIGetCursorInfo($GUI1)
    If _IsPressed(01) Then
    Select
    Case $Mouseposmain[0] > 406 And $Mouseposmain[0] < 469 And $Mouseposmain[1] > 12 And $Mouseposmain[1] < 61
    Return $ST_main_menu
    EndSelect
    Else
    Return $ST_options

    EndIf

    EndFunc

    [/autoit]
  • so :D
    frag mich nich warum das n fehler is aba naja :D

    [autoit]

    Func Draw_Options()
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $OptHintergrund, 0, 0, $Width, $Height)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $hBitmap, 0, 0, $Width, $Height)

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

    Local $Mouseposmain = GUIGetCursorInfo($GUI1)
    If _IsPressed(01) Then
    Select
    Case $Mouseposmain[0] > 406 And $Mouseposmain[0] < 469 And $Mouseposmain[1] > 12 And $Mouseposmain[1] < 61
    MsgBox(0, "" , "")
    Return $ST_main_menu
    EndSelect
    EndIf
    Return $ST_options

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

    EndFunc

    [/autoit]
  • Edit: Nachdem ich mir den ganzen Sourcecode angeguckt habe ist das wohl nicht hilfreich.

    Spoiler anzeigen

    So siehts schöner aus und ist schneller: ;)

    [autoit]

    Func Draw_Options()
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $OptHintergrund, 0, 0, $Width, $Height)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $hBitmap, 0, 0, $Width, $Height)

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

    Local $Mouseposmain = GUIGetCursorInfo($GUI1)
    If _IsPressed(01) and $Mouseposmain[0] > 406 And $Mouseposmain[0] < 469 And $Mouseposmain[1] > 12 And $Mouseposmain[1] < 61 Then
    Return $ST_main_menu
    else
    Return $ST_options
    EndIf
    EndFunc

    [/autoit]

    Ich habs allerdings nicht getestet.
    Und das else ist nur weil ich übersichtlihcher finde.

    mfg Ubuntu

    Einmal editiert, zuletzt von Ubuntu (5. Juli 2010 um 22:15)

  • Siehe Edit (hatt ich dann auch gesehen und wieder 5 Minuten gebraucht um das Edit zu schreiben und abzuschicken)

    mfg Ubuntu