GDI+ Grafik in einem Tab erstellen

  • Hallo,

    ich habe mir eine GUI mit mehreren TABs erstellt und möchte darin die Funktionen von GDI+ verwenden.

    Habe es versucht wie direkt in einer GUI, aber in dem TAB wird nichts angezeigt.

    Funktioniert das was ich vorhabe?

    Kann mir jemand ein kleines Beispiel geben?


    Dank und Gruß

    Ingo

  • Hallo Ingo,

    auf ein Tab Item zu zeichnen ist, glaube ich, nicht möglich.

    Ich habe dir aber mal ein Skript geschrieben, was die gleiche Funktion hat:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <APIConstants.au3>
    _GDIPlus_Startup ()

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

    Global $hGUI = GUICreate ("Test", 500, 300)
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    Global $iTab = GUICtrlCreateTab (10, 10, 480, 280)
    GUICtrlCreateTabItem ("Test1")
    GUICtrlCreateTabItem ("Test2")
    GUICtrlCreateTabItem ("")
    GUISetState ()

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

    Global $iSelectedTab = -1

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

    While GUIGetMsg () <> -3

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

    If GUICtrlRead ($iTab) <> $iSelectedTab Then
    $iSelectedTab = GUICtrlRead ($iTab)
    _WinAPI_RedrawWindow($hGUI)
    _Paint ()
    EndIf

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

    WEnd
    _GDIPlus_GraphicsDispose ($hGraphics)
    _GDIPlus_Shutdown ()

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

    Func _Paint ()
    Switch GUICtrlRead ($iTab)
    Case 0 ; Wenn 1. Tab Item ausgewählt
    _GDIPlus_GraphicsDrawEllipse ($hGraphics, 40, 40, 430, 230)
    Case 1 ; Wenn 2. Tab Item ausgewählt
    _GDIPlus_GraphicsDrawRect ($hGraphics, 40, 40, 430, 230)
    EndSwitch
    EndFunc

    [/autoit]


    Es wir auf die ganze GUI gezeichnet, jedoch abhängig vom aktuell gewählten Tab Item.

    MfG Xenon :)

    2 Mal editiert, zuletzt von Xenon (29. Oktober 2013 um 20:02)

  • Hallo,

    vielen Dank für die Hilfe,

    damit kann ich was anfangen.

    Und da ich weiß wo der Tab ist, ist es das gleiche wie auf dem Tab zeichnen.

    Top Hilfe und eine gute Idee :) :thumbup:

  • Um das Skript von Xenon aufzugreifen...
    Du kannst auch einfach auf einzelne Controls in den Tabs zeichnen:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    _GDIPlus_Startup ()

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

    Global $hGUI = GUICreate ("Test", 500, 300)
    Global $iTab = GUICtrlCreateTab (10, 10, 480, 280)
    GUICtrlCreateTabItem("Test1")
    $cGraphics1 = GUICtrlCreateGraphic(0, 0, 480, 280)
    GUICtrlCreateTabItem("Test2")
    $cGraphics2 = GUICtrlCreateGraphic(0, 0, 480, 280)
    GUICtrlCreateTabItem("")

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

    $hGraphics1 = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($cGraphics1))
    $hGraphics2 = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($cGraphics2))

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

    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    _Draw()
    Sleep(20)
    WEnd

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

    Func _Paint ()
    Switch GUICtrlRead ($iTab)
    Case 0 ; Wenn 1. Tab Item ausgewählt

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

    Case 1 ; Wenn 2. Tab Item ausgewählt
    _GDIPlus_GraphicsDrawRect ($hGraphics, 40, 40, 430, 230)
    EndSwitch
    EndFunc

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

    Func _Draw()
    _GDIPlus_GraphicsDrawEllipse ($hGraphics1, 40, 40, 430, 230)
    _GDIPlus_GraphicsDrawRect ($hGraphics2, 40, 40, 430, 230)
    EndFunc

    [/autoit]

    lg

  • Hallo,

    also die Lösung von chesstiger ist natürlich besser, so mit eigenen Controls. Dann muss man nicht immer das aktive Tab-Item überprüfen...

    Aber die _Paint-Funktion von mir sollte noch aus dem Skript entfernt werden, damit es läuft, oder? ;)

    MfG Xenon :)

  • Ja, könnte man annehmen, aber bei mir kommt als Fehlermeldung, wenn ich es nicht entferne, folgendes:

    Code
    ERROR: $hGraphics: undeclared global variable.

    Obwohl die Funktion nie aufgerufen wird, wird das trotzdem erkannt... :rolleyes:

    MfG Xenon :)