Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Как сохранить фон при перерисовки положения линии созданной с помощью GDI (http://forum.oszone.net/showthread.php?t=178997)

HORRIBLE 23-06-2010 18:00 1440285

Как сохранить фон при перерисовки положения линии созданной с помощью GDI
 
Код:

#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
Global $hGUI, $hGraphics, $hPen, $hBmp, $hBmpGraphics, $line_y = 100, $line_x = 100

$dll = DllOpen("user32.dll")

_Main()

DllClose($dll)

Func _Main()


    $hGUI = GUICreate("GDI+", 300, 300)
    $oIE = ObjCreate("Shell.Explorer.2")
    $GUIActiveX = GUICtrlCreateObj ($oIE, 0, 0, 400, 300)
    $oIE.navigate('')
    GUISetState()

    _GDIPlus_Startup ()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    $hBmp = _GDIPlus_BitmapCreateFromGraphics(400, 300, $hGraphics)
    $hBmpGraphics = _GDIPlus_ImageGetGraphicsContext($hBmp)
    $hPen = _GDIPlus_PenCreate (0xFFFF0000)

    _GDIPlus_GraphicsDrawLine ($hGraphics, 0, $line_y, 300, $line_y, $hPen)
    _GDIPlus_GraphicsDrawLine ($hGraphics, $line_x, 0, $line_x, 300, $hPen)
    _GDIPlus_GraphicsDrawString ($hGraphics, '['&$line_x&' ; '&$line_y&']', $line_x-55, $line_y-15, 'Arial', 8)

    Do
        If _IsPressed("26", $dll) Then line_move($line_x, $line_y - 1)

        If _IsPressed("28", $dll) Then line_move($line_x, $line_y + 1)

        If _IsPressed("25", $dll) Then line_move($line_x - 1, $line_y)

        If _IsPressed("27", $dll) Then line_move($line_x + 1, $line_y)

    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    _GDIPlus_PenDispose ($hPen)
    _GDIPlus_GraphicsDispose ($hGraphics)
    _GDIPlus_Shutdown ()

EndFunc  ;==>_Main

Func line_move($x, $y)
    $line_x = $x
    $line_y = $y
    _GDIPlus_GraphicsClear($hBmpGraphics, 0xFFF0F0F0)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmp, 0, 0)
    _GDIPlus_GraphicsDrawLine ($hGraphics, $x, 0, $x, 300, $hPen)
    _GDIPlus_GraphicsDrawLine ($hGraphics, 0, $y, 300, $y, $hPen)
    _GDIPlus_GraphicsDrawString ($hGraphics, '['&$line_x&' ; '&$line_y&']', $line_x-55, $line_y-15, 'Arial', 8)
EndFunc

Управлять перекрестием, стрелочками влево,вправо, вверх, вниз.
Тут при перерисовки линии фон перерисовывается, если закоментировать _GDIPlus_GraphicsClear($hBmpGraphics, 0xFFF0F0F0) то получится заливка. Как сделать ток чтобы при новом положении линии фон не изменялся?


Время: 21:22.

Время: 21:22.
© OSzone.net 2001-