Pong mit GDI+, wie mach ich den Strich beweglich?

  • Hallo,
    versuche gerade Pong in GDI+ zu progamieren, aber wie mach ich den Strich beweglich ( in der Hoch Funktion )

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet ( "{ESC}", "_ende" )

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

    Global $Titel="Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()

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

    Global $hGUI = GUICreate( "Pong" , @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen=GUICtrlCreateLabel ( "Willkommen bei Pong made by Greek", @DesktopWidth/4, @DesktopHeight/2-150, 1000, 200 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep ( 100 )
    Until _IsPressed ( "0D", $dll ) Or _IsPressed ( "20", $dll )

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

    GUICtrlSetState ( $Willkommen, $GUI_HIDE )

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hPenRahmen = _GDIPlus_PenCreate (0xFF00FF00, 15, 2)
    $hPen = _GDIPlus_PenCreate (0xFFFFFFFF, 15, 2)
    ;~ _GDIPlus_GraphicsDrawLine ($hGraphic, 100, 100, 100, 250, $hPen)
    $b=_GDIPlus_GraphicsDrawLine ($hGraphic, 100, @DesktopHeight/2.5, 100, @DesktopHeight/1.8, $hPen)
    _GDIPlus_GraphicsDrawLine ($hGraphic, @DesktopWidth-100, @DesktopHeight/2.5, @DesktopWidth-100, @DesktopHeight/1.8, $hPen)
    _DrawRahmen()
    $Spielstand=GUICtrlCreateLabel ( "0:0", @DesktopWidth/2, @DesktopHeight/15, 100, 100 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    HotKeySet( "w", "_hoch" )
    HotKeySet( "s", "_runter" )

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _hoch()
    While _IsPressed ( "57", $dll )

    WEnd
    EndFunc

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

    Func _runter()
    EndFunc

    [/autoit]

    Würde mich auch über andere Tipps freuern, wie z.B. ich den Ball richtig fliegen lasse oder er merkt das der Ball gegen die Wand gekommen ist.

    Einmal editiert, zuletzt von Greek (6. März 2009 um 21:10)

  • Die Grafik ist ja schonmal geil, hat mich sofort an alte Zeiten erinnert! :thumbup:

    Ich würde erstmal Variablen für die Schlägerposition anlegen und die dann in den angedeuteten Funktionen für hoch und runter in- bzw. dekrementieren.
    Das Zeichnen der Schläger würde ich in eine separate Funktion auslagern und dann die Variablenwerte für die DrawLines nehmen. Dann musst du aber den alten Schläger auch jedesmal löschen. Oder du erstellst dir für die Schläger Grafikobjekte, die du dann relativ einfach auf dem Bildschirm verschieben kannst.

    Gruß Ashpool

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

    Einmal editiert, zuletzt von Ashpool (4. März 2009 um 21:02)

  • Danke für deine Hilfe! =D

    so bissel ausgebessert:

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet ( "{ESC}", "_ende" )
    Global $Strichpos1=@DesktopHeight/2-70
    Global $Strichpos2=@DesktopHeight/2+70
    Global $Titel="Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()

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

    Global $hGUI = GUICreate( $Titel , @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen=GUICtrlCreateLabel ( "Willkommen bei Pong made by Greek", @DesktopWidth/4, @DesktopHeight/2-150, 1000, 200 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep ( 100 )
    Until _IsPressed ( "0D", $dll ) Or _IsPressed ( "20", $dll )

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

    GUICtrlSetState ( $Willkommen, $GUI_HIDE )

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hPenRahmen = _GDIPlus_PenCreate (0xFF00FF00, 15, 2)
    $hPen = _GDIPlus_PenCreate (0xFFFFFFFF, 15, 2)
    $b=_GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine ($hGraphic, @DesktopWidth-100, $Strichpos1, @DesktopWidth-100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand=GUICtrlCreateLabel ( "0:0", @DesktopWidth/2, @DesktopHeight/15, 100, 100 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    HotKeySet( "w", "_hoch" )
    HotKeySet( "s", "_runter" )

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _hoch()
    While _IsPressed ( "57", $dll )

    WEnd
    EndFunc

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

    Func _runter()
    EndFunc

    [/autoit]

    Also ich muss den alten Schläger immer wieder löschen, aber welchen Befehl brauch ich da?
    _GDIPlus_GraphicsDispose oder _GDIPlus_GraphicsClear ? Die Beschreibung ist komisch, Dispose weis ich nicht genau was es macht und Clear macht die Farbe nur anders?

    Also würde das so dann ungefair ausehen?
    While _ispressed ...
    _GDI.....DrawLine(...$strichpos1+20,...,$strichpos2+20)
    _GDI....Stichlöschen ( ?? welche funktion )
    _GDI.....DrawLine(...$strichpos1+20,...,$strichpos2+20)
    usw. bis losgelassen wird.
    wend

  • Moinsen,

    Zitat von Greek

    Also ich muss den alten Schläger immer wieder löschen, aber welchen Befehl brauch ich da?


    [ offen ] _GDIPlus: Graphic wieder leeren?

    Zitat von Greek

    Würde mich auch über andere Tipps freuern, wie z.B. ich den Ball richtig fliegen lasse oder er merkt das der Ball gegen die Wand gekommen ist.

    Spoiler anzeigen
    [autoit]

    ; http://msdn.microsoft.com/en-us/library/dd162481(VS.85).aspx
    ; In diesem Beispiel zeichnen wir in Zeit-Intervallen
    ; unter Nutzung eines Timers.
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>

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

    ; --- $tagPOINT
    Global Const $tagPOINT = _
    'long x;'& _
    'long y;'

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

    ; --- $tagRECT
    Global Const $tagRECT = _
    'long left;'& _
    'long top;'& _
    'long right;'& _
    'long bottom;'

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

    ; --- $tagPAINTSTRUCT
    Global Const $tagPAINTSTRUCT = _
    'ptr hdc;'& _
    'int fErase;'& _
    $tagRECT& _
    'int fRestore;'& _
    'int fIncUpdate;'& _
    'ubyte rgbReserved[32];'

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

    Global $NULL = Ptr (0)

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

    Global Const $SIZE_RESTORED = 0
    Global Const $SIZE_MINIMIZED = 1
    Global Const $SIZE_MAXIMIZED = 2
    Global Const $R2_NOT = 6

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

    ;-- Globale Variablen für die Fensternachrichten.

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

    Global $X = 2, $Y = -1, $idTimer = -1
    Global $fVisible = FALSE
    Global $hdc

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

    ; Punkte der Sternzacken
    Global $aptStar = DllStructCreate (StructArray ($tagPOINT, 6))
    Global $aStar [12] = [10,1, 1,19, 19,6, 1,6, 19,19, 10,1]
    For $i = 0 To 11
    DllStructSetData ($aptStar, $i + 1, $aStar[$i])
    Next

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

    ; Rechteck für den Stern
    Global $rcCurrent = DllStructCreate ($tagRECT)
    DllStructSetData ($rcCurrent, 'left' , 0)
    DllStructSetData ($rcCurrent, 'top' , 0)
    DllStructSetData ($rcCurrent, 'right' , 20)
    DllStructSetData ($rcCurrent, 'bottom', 20)

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



    ; Fensternachrichten, die bearbeitet werden.
    GUIRegisterMsg ($WM_CREATE , 'MY_WM_CREATE')
    GUIRegisterMsg ($WM_DESTROY , 'MY_WM_DESTROY')
    GUIRegisterMsg ($WM_SIZE , 'MY_WM_SIZE')
    GUIRegisterMsg ($WM_TIMER , 'MY_WM_TIMER')
    GUIRegisterMsg ($WM_ERASEBKGND, 'MY_WM_ERASEBKGND')
    GUIRegisterMsg ($WM_PAINT , 'MY_WM_PAINT')

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

    ; Fensterstile
    Global Const $WS_EX_COMPOSITED = 0x2000000 ; Gegen "Flackern"

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

    ; Das übliche ...
    $hWnd = GUICreate ('Drawing at Timed Intervals', 400, 350, -1, -1, _
    $WS_OVERLAPPEDWINDOW, $WS_EX_COMPOSITED)

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

    GUISetState (@SW_SHOW)

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

    While True

    Switch GUIGetMsg ()
    Case -3
    GUIDelete ($hWnd)
    ExitLoop
    EndSwitch
    WEnd

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

    Func MY_WM_CREATE ($hwnd, $message, $wParam, $lParam)

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

    Local $rcCurrent_left, $rcCurrent_top, $rc_right, $rc_bottom
    Local $rc = DllStructCreate ($tagRECT)

    $rcCurrent_left = DllStructGetData ($rcCurrent, 'left')
    $rcCurrent_top = DllStructGetData ($rcCurrent, 'top')

    ; Startpunkt errechnen.
    GetClientRect ($hwnd, DllStructGetPtr ($rc))
    $rc_right = DllStructGetData ($rc, 'right')
    $rc_bottom = DllStructGetData ($rc, 'bottom')

    OffsetRect (DllStructGetPtr ($rcCurrent), $rc_right / 2, $rc_bottom / 2)

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

    ; Den privaten Gerätekontext initialisieren.
    $hdc = GetDC ($hwnd)
    SetViewportOrgEx ($hdc, $rcCurrent_left, _
    $rcCurrent_top, $NULL)
    SetROP2 ($hdc, $R2_NOT)

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

    ; Timer starten.
    $idTimer = 1
    SetTimer ($hwnd, $idTimer, 10, $NULL)
    Return 0

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

    EndFunc

    Func MY_WM_DESTROY ($hwnd, $message, $wParam, $lParam)

    KillTimer ($hwnd, 1)
    PostQuitMessage (0)
    Return $GUI_RUNDEFMSG

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

    EndFunc

    Func MY_WM_SIZE ($hwnd, $message, $wParam, $lParam)

    Local $rcCurrent_left, $rcCurrent_top, $rcCurrent_right, $rcCurrent_bottom

    $rcCurrent_left = DllStructGetData ($rcCurrent, 'left')
    $rcCurrent_top = DllStructGetData ($rcCurrent, 'top')
    $rcCurrent_right = DllStructGetData ($rcCurrent, 'right')
    $rcCurrent_bottom = DllStructGetData ($rcCurrent, 'bottom')

    Switch ($wParam)

    Case $SIZE_MINIMIZED

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

    ; Den Timer stoppen, falls das Fenster minimiert ist.
    KillTimer ($hwnd, 1)
    $idTimer = -1

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

    Case $SIZE_RESTORED

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

    ; Den Stern in den Anwendungsbereich bewegen,
    ; falls nötig.
    If ($rcCurrent_right > Int (LOWORD ($lParam))) Then

    DllStructSetData ($rcCurrent, 'left', _
    DllStructSetData ($rcCurrent, 'right', _
    Int (LOWORD ($lParam))) - 20)
    EndIf

    If ($rcCurrent_bottom > Int (HIWORD ($lParam))) Then

    DllStructSetData ($rcCurrent, 'top', _
    DllStructSetData ($rcCurrent, 'bottom', _
    Int (HIWORD ($lParam))) - 20)
    EndIf

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

    ; Weiter mit dem nächsten Case-Zweig.
    ContinueCase

    Case $SIZE_MAXIMIZED

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

    ; Den Timer starten, falls dieser gestoppt wurde.
    If ($idTimer == -1) Then
    $idTimer = 1
    SetTimer ($hwnd, $idTimer, 10, $NULL)
    EndIf

    EndSwitch

    Return 0

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

    EndFunc

    Func MY_WM_TIMER ($hwnd, $message, $wParam, $lParam)

    Local $rc_left, $rc_top, $rc_right, $rc_bottom
    Local $rcCurrent_left, $rcCurrent_top, $rcCurrent_right, $rcCurrent_bottom
    Local $rc = DllStructCreate ($tagRECT)

    $rcCurrent_left = DllStructGetData ($rcCurrent, 'left')
    $rcCurrent_top = DllStructGetData ($rcCurrent, 'top')
    $rcCurrent_right = DllStructGetData ($rcCurrent, 'right')
    $rcCurrent_bottom = DllStructGetData ($rcCurrent, 'bottom')

    ; Verstecke den Stern, wenn er sichtbar ist.
    If ($fVisible) Then _
    Polyline ($hdc, DllStructGetPtr ($aptStar), 6)

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

    ; Lasse den Stern von den Seiten abprallen, falls nötig.
    GetClientRect ($hwnd, DllStructGetPtr ($rc))
    $rc_left = DllStructGetData ($rc, 'left')
    $rc_top = DllStructGetData ($rc, 'top')
    $rc_right = DllStructGetData ($rc, 'right')
    $rc_bottom = DllStructGetData ($rc, 'bottom')

    If ($rcCurrent_left + $X < $rc_left Or _
    $rcCurrent_right + $X > $rc_right) Then _
    $X = -$X

    If ($rcCurrent_top + $Y < $rc_top Or _
    $rcCurrent_bottom + $Y > $rc_bottom) Then _
    $Y = -$Y

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

    ; Zeige den Stern in seiner neuen Position.
    OffsetRect (DllStructGetPtr ($rcCurrent), $X, $Y)
    SetViewportOrgEx ($hdc, $rcCurrent_left, _
    $rcCurrent_top, $NULL)
    $fVisible = Polyline ($hdc, DllStructGetPtr ($aptStar), 6)

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

    Return 0

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

    EndFunc

    Func MY_WM_ERASEBKGND ($hwnd, $message, $wParam, $lParam)

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

    ; Lösche den Stern.
    $fVisible = FALSE
    Return DefWindowProc ($hwnd, $message, $wParam, $lParam)

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

    EndFunc

    Func MY_WM_PAINT ($hwnd, $message, $wParam, $lParam)

    Local $ps = DllStructCreate ($tagPAINTSTRUCT)
    Local $lpps = DllStructGetPtr ($ps)

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

    ; Zeige den Stern, falls er nicht sichtbar ist. Nutze BeginPaint
    ; um die zu aktualisierende Region zu löschen.
    BeginPaint ($hwnd, $lpps)
    If (Not $fVisible) Then _
    $fVisible = Polyline ($hdc, DllStructGetPtr ($aptStar), 6)
    EndPaint ($hwnd, $lpps)

    Return 0

    EndFunc

    ;========================================================================================
    Func BeginPaint ($hWnd, $lpPaint)

    Local $aRes = DllCall('user32.dll', 'hwnd', 'BeginPaint', 'hwnd', $hWnd, 'ptr', $lpPaint)
    Return $aRes[0]

    EndFunc

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

    Func EndPaint ($hWnd, $lpPaint)

    Local $aResult = DllCall('user32.dll', 'int', 'EndPaint', 'hwnd', $hWnd, 'ptr', $lpPaint)
    Return $aResult[0]

    EndFunc

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

    Func Polyline ($hdc, $lppt, $cPoints)

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

    $aRes = DllCall ('gdi32.dll', 'int', 'Polyline', _
    'ptr', $hdc, _ ; handle to device context
    'ptr', $lppt, _ ; array of endpoints
    'int', $cPoints) ; number of points in array
    Return $aRes[0]

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

    EndFunc

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

    Func OffsetRect ($lprc, $dx, $dy)

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

    $aRes = DllCall ('user32.dll', 'int', 'OffsetRect', _
    'ptr', $lprc, _ ; rectangle
    'int', $dx, _ ; horizontal offset
    'int', $dy) ; vertical offset
    Return $aRes[0]

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

    EndFunc

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

    Func SetROP2 ($hdc, $fnDrawMode)

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

    $aRes = DllCall ('gdi32.dll', 'int', 'SetROP2', _
    'ptr', $hdc, _ ; handle to DC
    'int', $fnDrawMode) ; drawing mode
    Return $aRes[0]

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

    EndFunc

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

    Func SetViewportOrgEx ($hdc, $X, $Y, $lpPoint)

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

    $aRes = DllCall ('gdi32.dll', 'int', 'SetViewportOrgEx', _
    'ptr', $hdc, _ ; handle to device context
    'int', $X, _ ; new x-coordinate of viewport origin
    'int', $Y, _ ; new y-coordinate of viewport origin
    'ptr', $lpPoint) ; original viewport origin
    Return $aRes[0]

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

    EndFunc

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

    Func GetDC ($hWnd)

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

    $aRes = DllCall ('user32.dll', 'ptr', 'GetDC', _
    'hwnd', $hWnd) ; handle to window
    Return $aRes[0]

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

    EndFunc

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

    Func GetClientRect ($hWnd, $lpRect)

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

    $aRes = DllCall ('user32.dll', 'int', 'GetClientRect', _
    'hwnd', $hWnd, _
    'ptr', $lpRect)
    Return $aRes[0]

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

    EndFunc

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

    Func DefWindowProc ($hWnd, $Msg, $wParam, $lParam)

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

    $aRes = DllCall ('user32.dll', 'ulong', 'DefWindowProc', _
    'hwnd', $hWnd, _
    'uint', $Msg, _
    'wparam', $wParam, _
    'ptr', $lParam)
    Return $aRes[0]

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

    EndFunc

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

    Func PostQuitMessage ($nExitCode = 0)

    Local $aResult = DllCall ('user32.dll', 'none', 'PostQuitMessage', 'int', $nExitCode)
    Return $aResult[0]

    EndFunc

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

    Func SetTimer ($hwnd, $uIDEvent, $uElapse, $lpTimerFunc)

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

    Local $aRes = DllCall ('user32.dll', 'int', 'SetTimer', _
    'hwnd', $hwnd, _
    'uint', $uIDEvent, _
    'uint', $uElapse, _
    'ptr', $lpTimerFunc)
    Return $aRes [0]

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

    EndFunc

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

    Func KillTimer ($hwnd, $uIDEvent)

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

    Local $aRes = DllCall ('user32.dll', 'int', 'KillTimer', _
    'hwnd', $hwnd, _
    'uint', $uIDEvent)

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

    Return $aRes [0]

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

    EndFunc

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

    Func LOWORD ($DWORD)
    Return BitAND($DWORD, 0xFFFF)
    EndFunc

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

    Func HIWORD ($DWORD)
    Return BitShift($DWORD, 16)
    EndFunc

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

    Func StructArray ($sStruct, $iSize)

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

    If (Not $sStruct Or $iSize < 2) Then _
    Return
    If (Not StringRegExp ($sStruct, ';\s*\z',0)) Then _
    $sStruct&=';'
    For $i = 1 To $iSize - 1
    $sStruct&=$sStruct
    Next

    Return $sStruct

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

    EndFunc

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

    Ich hoffe das hilft ein wenig, ist zwar pure GDI (ohne Plus) aber letztenendes das Gleiche ...


    LG
    Greenhorn


  • Versteht jetzt immer noch nicht wie ich die Graphic lösche:

    InvalidateRect ($hWnd, $NULL, TRUE) ; löst eine WM_PAINT Nachricht aus

    Welche Befehl ist das bei GDI+? Blick bei deiner Uhr garnet durch :S

  • Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet ( "{ESC}", "_ende" )
    Global $Strichpos1=@DesktopHeight/2-70
    Global $Strichpos2=@DesktopHeight/2+70
    Global $Titel="Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()
    $WS_EX_COMPOSITED = 0x2000000
    Global $hGUI = GUICreate( $Titel , @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST,$WS_EX_COMPOSITED))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen=GUICtrlCreateLabel ( "Willkommen bei Pong made by Greek", @DesktopWidth/4, @DesktopHeight/2-150, 1000, 200 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep ( 100 )
    Until _IsPressed ( "0D", $dll ) Or _IsPressed ( "20", $dll )

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

    GUICtrlSetState ( $Willkommen, $GUI_HIDE )

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hPenRahmen = _GDIPlus_PenCreate (0xFF0000FF, 15, 2)
    $hPen = _GDIPlus_PenCreate (0xFFFFFFFF, 15, 2)
    $hpen_Del = _GDIPlus_PenCreate (0xFF000000, 15, 2)
    $b=_GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine ($hGraphic, @DesktopWidth-100, $Strichpos1, @DesktopWidth-100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand=GUICtrlCreateLabel ( "0:0", @DesktopWidth/2, @DesktopHeight/15, 100, 100 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    HotKeySet( "w", "_hoch" )
    HotKeySet( "s", "_runter" )

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _hoch()
    While _IsPressed ( "57", $dll )
    _GDIPlus_Graphicsdrawline($hGraphic,100,$strichpos1,100,$strichpos2,$hpen_del)
    if $Strichpos1 >= 25 then
    $strichpos1=$strichpos1-10
    $strichpos2=$strichpos2-10
    EndIf
    _GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    sleep(50)
    WEnd
    EndFunc

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

    Func _runter()
    While _IsPressed ( "53", $dll )
    _GDIPlus_Graphicsdrawline($hGraphic,100,$strichpos1,100,$strichpos2,$hpen_del)
    if $Strichpos2 <= @DesktopHeight-25 then
    $strichpos2=$strichpos2+10
    $strichpos1=$strichpos1+10
    EndIf

    _GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    sleep(50)
    WEnd
    EndFunc

    [/autoit]

    die unfeine lösung ;)

  • Welche Befehl ist das bei GDI+?

    Hilft die Funktion _GDIPlus_GraphicsClear weiter?
    Aus dem Beispiel in der Hilfe könnten vor allem diese Zeilen interessieren:

    [autoit]


    $hGraphic = _GDIPlus_ImageGetGraphicsContext ($hImage)
    _GDIPlus_GraphicsClear ($hGraphic)

    [/autoit]

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • Jetzt löscht der alles xD, was mach ich da Falsch?

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet ( "{ESC}", "_ende" )
    Global $Strichpos1=@DesktopHeight/2-70
    Global $Strichpos2=@DesktopHeight/2+70
    Global $Titel="Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()

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

    Global $hGUI = GUICreate( $Titel , @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen=GUICtrlCreateLabel ( "Willkommen bei Pong made by Greek", @DesktopWidth/4, @DesktopHeight/2-150, 1000, 200 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep ( 100 )
    Until _IsPressed ( "0D", $dll ) Or _IsPressed ( "20", $dll )

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

    GUICtrlSetState ( $Willkommen, $GUI_HIDE )

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hPenRahmen = _GDIPlus_PenCreate (0xFF00FF00, 15, 2)
    $hPen = _GDIPlus_PenCreate (0xFFFFFFFF, 15, 2)
    $startschlaegerL=_GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    $startschlaegerR=_GDIPlus_GraphicsDrawLine ($hGraphic, @DesktopWidth-100, $Strichpos1, @DesktopWidth-100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand=GUICtrlCreateLabel ( "0:0", @DesktopWidth/2, @DesktopHeight/15, 100, 100 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    HotKeySet( "w", "_hoch" )
    HotKeySet( "s", "_runter" )

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _hoch()
    ;~ While _IsPressed ( "57", $dll )
    ;~ _GDIPlus_GraphicsClear($startschlaegerL,0xFF000000)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext ($startschlaegerL)
    _GDIPlus_GraphicsClear ($hGraphic)
    ;~ WEnd
    EndFunc

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

    Func _runter()
    EndFunc

    [/autoit]
  • Ich hab es mal so gemacht, also nicht mit GDI+
    Und das die Maus das steuerungsgerät ist

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", @DesktopWidth, @DesktopHeight, -3, -29)
    GUISetBkColor (0x000000)
    $Label1 = GUICtrlCreateLabel ("",10,10,10,100)
    GUICtrlSetBkColor (-1,0xFFFFFF)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $Old = 10
    While 1
    $Pos = GUIGetCursorInfo ()
    If IsArray ($Pos) Then
    If $Pos[1] <> $Old Then
    If $Pos[1] > 10 And $Pos[1] < @DesktopHeight -110 Then
    $Old = $Pos[1]
    ControlMove ($Form1,"",$Label1,10,$Pos[1])
    EndIf
    EndIf
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00

  • $hGraphic

    das ja dein handle für das main object ;)

    wenn dann müsstest du $b nehmen was du ja glaub ich für die balken hattest

    edit: xd hab ne crazy idee ^^

    mach tooltips als balken xDDD
    die kannste mit minmove verschieben *gg*

    edit2: der ball -.-

    [autoit]

    func _drawball()
    _GDIPlus_GraphicsDrawArc($hGraphic,@DesktopWidth/2,@DesktopHeight/2,10,10,0,360,$hpen)
    EndFunc

    [/autoit]

    und ich rechne erst jedes pixel mit pi aus xD

    Einmal editiert, zuletzt von azunai (6. März 2009 um 18:28)

  • Oh ja da war was mit dem Variablen namen falsch

    aber so:

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet ( "{ESC}", "_ende" )
    Global $Strichpos1=@DesktopHeight/2-70
    Global $Strichpos2=@DesktopHeight/2+70
    Global $Titel="Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()

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

    Global $hGUI = GUICreate( $Titel , @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen=GUICtrlCreateLabel ( "Willkommen bei Pong made by Greek", @DesktopWidth/4, @DesktopHeight/2-150, 1000, 200 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep ( 100 )
    Until _IsPressed ( "0D", $dll ) Or _IsPressed ( "20", $dll )

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

    GUICtrlSetState ( $Willkommen, $GUI_HIDE )

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hPenRahmen = _GDIPlus_PenCreate (0xFF0000FF, 15, 2)
    $hPen = _GDIPlus_PenCreate (0xFFFFFFFF, 15, 2)
    $startschlaegerL=_GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    $startschlaegerR=_GDIPlus_GraphicsDrawLine ($hGraphic, @DesktopWidth-100, $Strichpos1, @DesktopWidth-100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand=GUICtrlCreateLabel ( "0:0", @DesktopWidth/2, @DesktopHeight/15, 100, 100 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    HotKeySet( "w", "_hoch" )
    HotKeySet( "s", "_runter" )

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _hoch()
    ;~ While _IsPressed ( "57", $dll )
    ;~ _GDIPlus_GraphicsClear($startschlaegerL,0xFF000000)
    $hb = _GDIPlus_ImageGetGraphicsContext ($startschlaegerL)
    _GDIPlus_GraphicsClear ($hb)
    ;~ WEnd
    EndFunc

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

    Func _runter()
    EndFunc

    [/autoit]

    Funzt es auch nicht :/

  • So sieht's doch ganz gut aus, oder?

    Spoiler anzeigen
    [autoit]

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

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

    HotKeySet("{ESC}", "_ende")
    Global $Strichpos1 = @DesktopHeight / 2 - 70
    Global $Strichpos2 = @DesktopHeight / 2 + 70
    Global $Titel = "Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()
    ;~ $WS_EX_COMPOSITED = 0x2000000
    Global $hGUI = GUICreate($Titel, @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, 0x0));$WS_EX_COMPOSITED))
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen = GUICtrlCreateLabel("Willkommen bei Pong made by Greek", @DesktopWidth / 4, @DesktopHeight / 2 - 150, 1000, 200)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(100)
    Until _IsPressed("0D", $dll) Or _IsPressed("20", $dll)

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

    GUICtrlSetState($Willkommen, $GUI_HIDE)

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hPenRahmen = _GDIPlus_PenCreate(0xFF0000FF, 15, 2)
    $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 15, 2)
    $hpen_Del = _GDIPlus_PenCreate(0xFF000000, 15, 2)
    $b = _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - 100, $Strichpos1, @DesktopWidth - 100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand = GUICtrlCreateLabel("0:0", @DesktopWidth / 2, @DesktopHeight / 15, 100, 100)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    AdlibEnable('_Zyklus', 10)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_ende

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _Zyklus()
    If _IsPressed('57') Then
    _hoch()
    ElseIf _IsPressed('53') Then
    _runter()
    EndIf
    ;Hier müssen noch die restlichen Aktionen rein
    EndFunc ;==>_Zyklus

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

    Func _hoch()
    If $Strichpos1 >= 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos2 - 10, 100, $Strichpos2, $hpen_Del)
    $Strichpos1 -= 10
    $Strichpos2 -= 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf

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

    EndFunc ;==>_hoch

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

    Func _runter()
    If $Strichpos2 <= @DesktopHeight - 25 Then
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos1 + 10, $hpen_Del)
    $Strichpos1 += 10
    $Strichpos2 += 10
    _GDIPlus_GraphicsDrawLine($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    EndIf
    EndFunc ;==>_runter

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    HotKeySet ( "{ESC}", "_ende" )
    Global $schlaegerschnelle=10
    Global $Strichpos1=@DesktopHeight/2-70
    Global $Strichpos2=@DesktopHeight/2+70
    Global $Titel="Pong"
    Global $Rahmenbreite = 10
    Global $dll = DllOpen("user32.dll")
    _GDIPlus_Startup()

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

    Global $hGUI = GUICreate( $Titel , @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
    Global $hwnd = WinGetHandle($Titel)
    GUISetBkColor(0x0)
    $Willkommen=GUICtrlCreateLabel ( "Willkommen bei Pong made by Greek", @DesktopWidth/4, @DesktopHeight/2-150, 1000, 200 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep ( 100 )
    Until _IsPressed ( "0D", $dll ) Or _IsPressed ( "20", $dll )

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

    GUICtrlSetState ( $Willkommen, $GUI_HIDE )

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hpen_Del = _GDIPlus_PenCreate (0xFF000000, 15, 2)
    $hPenRahmen = _GDIPlus_PenCreate (0xFF0000FF, 15, 2)
    $hPen = _GDIPlus_PenCreate (0xFFFFFFFF, 15, 2)
    $startschlaegerL=_GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    $startschlaegerR=_GDIPlus_GraphicsDrawLine ($hGraphic, @DesktopWidth-100, $Strichpos1, @DesktopWidth-100, $Strichpos2, $hPen)
    _DrawRahmen()
    $Spielstand=GUICtrlCreateLabel ( "0:0", @DesktopWidth/2, @DesktopHeight/15, 100, 100 )
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 40)

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

    HotKeySet( "w", "_hochL" )
    HotKeySet( "s", "_runterL" )
    HotKeySet( "{UP}", "_hochR" )
    HotKeySet( "{DOWN}", "_runterR" )

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _ende()
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    Func _DrawRahmen()
    _GDIPlus_GraphicsDrawLine($hGraphic, $Rahmenbreite / 2, 0, $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, $Rahmenbreite / 2, @DesktopWidth, $Rahmenbreite / 2, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, @DesktopWidth - $Rahmenbreite / 2, 0, @DesktopWidth - $Rahmenbreite / 2, @DesktopHeight, $hPenRahmen)
    _GDIPlus_GraphicsDrawLine($hGraphic, 0, @DesktopHeight - $Rahmenbreite / 2, @DesktopWidth, @DesktopHeight - $Rahmenbreite / 2, $hPenRahmen)
    EndFunc ;==>_DrawRahmen

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

    Func _hochL()
    While _IsPressed ( "57", $dll )
    _GDIPlus_Graphicsdrawline($hGraphic,100,$strichpos1,100,$strichpos2,$hpen_del)
    If $Strichpos1 >= 25 then
    $strichpos1=$strichpos1-10
    $strichpos2=$strichpos2-10
    EndIf
    _GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    Sleep($schlaegerschnelle)
    WEnd
    EndFunc

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

    Func _runterL()
    While _IsPressed ( "53", $dll )
    _GDIPlus_Graphicsdrawline($hGraphic,100,$strichpos1,100,$strichpos2,$hpen_del)
    If $Strichpos2 <= @DesktopHeight-25 then
    $strichpos2=$strichpos2+10
    $strichpos1=$strichpos1+10
    EndIf
    _GDIPlus_GraphicsDrawLine ($hGraphic, 100, $Strichpos1, 100, $Strichpos2, $hPen)
    Sleep($schlaegerschnelle)
    WEnd
    EndFunc

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

    Func _hochR()
    While _IsPressed ( "57", $dll )
    _GDIPlus_Graphicsdrawline($hGraphic,@DesktopWidth-100,$strichpos1,@DesktopWidth-100,$strichpos2,$hpen_del)
    If $Strichpos1 >= 25 then
    $strichpos1=$strichpos1-10
    $strichpos2=$strichpos2-10
    EndIf
    _GDIPlus_GraphicsDrawLine ($hGraphic, @DesktopWidth-100, $Strichpos1, @DesktopWidth-100, $Strichpos2, $hPen)
    Sleep($schlaegerschnelle)
    WEnd
    EndFunc

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

    Func _runterR()
    While _IsPressed ( "53", $dll )
    _GDIPlus_Graphicsdrawline($hGraphic,@DesktopWidth-100,$strichpos1,@DesktopWidth-100,$strichpos2,$hpen_del)
    If $Strichpos2 <= @DesktopHeight-25 then
    $strichpos2=$strichpos2+10
    $strichpos1=$strichpos1+10
    EndIf
    _GDIPlus_GraphicsDrawLine ($hGraphic, @DesktopWidth-100, $Strichpos1, @DesktopWidth-100, $Strichpos2, $hPen)
    Sleep($schlaegerschnelle)
    WEnd
    EndFunc

    [/autoit]

    Warum geht der Rechte nicht? Wenn ich ganz viele Tasten aufeinmal drück, passiert auch bei dem Rechtem was O.o

    funkey
    Mit _IsPressed beept das voll, kann man das wegmachen?

    2 Mal editiert, zuletzt von Greek (6. März 2009 um 19:39)