Что нового

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

HORRIBLE

Знающий
Сообщения
22
Репутация
10
Что я навоял со справкой вместе.
Код:
#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()

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

    ; Draw line
    _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)


    ; Loop until user exits

    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

    ; Clean up resources
    _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_GraphicsDispose на деле, что она делает, я так и не понял (освобождает графический объект)
 
Верх