passwd
Новичок
- Сообщения
- 30
- Репутация
- 0
Подскажите пожалуйста, я пытаюсь сделать GUI, в котором есть поле с картинкой и кнопка. Но только при условии, что поле с картинкой должно вмещать в себя две картинки, одна из которых PNG. Первую картинку я буду брать из скриншота, а вторую накладывать сверху на первую. Вторую картинку мне нужно перемещать, масштабировать, крутить и всё это поверх первой картинки. Всё сделал, всё почти получилось кроме одного, не могу понять как поставить первую картинку на фон за второй.
В итоге вопрос, как поместить первую картинку на фон за второй вот в таком GUI? Первую картинку я буду брать из скриншота, потом двигать/масштабировать на ней вторую и опять делать скриншот но уже Control'а этого окна.
В итоге вопрос, как поместить первую картинку на фон за второй вот в таком GUI? Первую картинку я буду брать из скриншота, потом двигать/масштабировать на ней вторую и опять делать скриншот но уже Control'а этого окна.
Код:
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
Global Const $AC_SRC_ALPHA = 1
Global $g_hGUI, $g_hGraphics, $g_hBmp_Buffer, $g_hGfx_Buffer, $g_hImage
Global $g_iMouseX, $g_iMouseY
Example()
Func Example()
AutoItSetOption("GUIOnEventMode", 1)
Local $sFile = @ScriptDir & "\1.png"
If Not FileExists($sFile) Then
MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", $sFile & " not found!", 30)
Exit
EndIf
Local $sFile2 = @ScriptDir & "\2.png" ; просто для примера, потом я буду брать эту картинку из скриншота
If Not FileExists($sFile2) Then
MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", $sFile2 & " not found!", 30)
Exit
EndIf
$g_hGUI = GUICreate("Document", 701, 671, -1, -1)
GUISetBkColor(0xFFFFFF)
$Graphic1 = GUICtrlCreateGraphic("", 8, 8, 409, 657)
$Button1 = GUICtrlCreateButton("Calculate", 424, 8, 161, 33)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "_ResetGraphicsTransform")
GUISetState(@SW_SHOW)
_GDIPlus_Startup()
$g_hGraphics = _GDIPlus_GraphicsCreateFromHWND($g_hGUI)
$g_hBmp_Buffer = _GDIPlus_BitmapCreateFromGraphics(409, 657, $g_hGraphics)
$g_hGfx_Buffer = _GDIPlus_ImageGetGraphicsContext($g_hBmp_Buffer)
$g_hImage = _GDIPlus_ImageLoadFromFile($sFile2)
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL")
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSEMOVE")
GUISetState(@SW_SHOW)
_Draw()
While Sleep(10)
WEnd
EndFunc ;==>Example
Func _ResetGraphicsTransform()
_GDIPlus_GraphicsResetTransform($g_hGfx_Buffer)
_Draw()
EndFunc ;==>_ResetGraphicsTransform
Func WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
$g_iMouseX = BitAND($lParam, 0x0000FFFF)
$g_iMouseY = BitShift($lParam, 16)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_LBUTTONDOWN
Func WM_MOUSEMOVE($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg
Switch BitAND($wParam, 0x0000FFFF)
Case 1
Local $iX = BitAND($lParam, 0x0000FFFF)
Local $iY = BitShift($lParam, 16)
_GDIPlus_GraphicsTranslateTransform($g_hGfx_Buffer, $iX - $g_iMouseX, $iY - $g_iMouseY, True)
$g_iMouseX = $iX
$g_iMouseY = $iY
_Draw()
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOUSEMOVE
Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $lParam
Switch BitAND($wParam, 0x0000FFFF)
Case 1
Local $iAngle = -3
If BitShift($wParam, 16) < 0 Then $iAngle = 3
Local $aMousePos[2][2] = [[1]]
$aMousePos[1][0] = $g_iMouseX
$aMousePos[1][1] = $g_iMouseY
_GDIPlus_GraphicsTransformPoints($g_hGfx_Buffer, $aMousePos)
_GDIPlus_GraphicsTranslateTransform($g_hGfx_Buffer, $aMousePos[1][0], $aMousePos[1][1])
_GDIPlus_GraphicsRotateTransform($g_hGfx_Buffer, $iAngle)
_GDIPlus_GraphicsTranslateTransform($g_hGfx_Buffer, -$aMousePos[1][0], -$aMousePos[1][1])
Case Else
Local $aInfo = GUIGetCursorInfo($g_hGUI)
Local $iScale = 1.1
If BitShift($wParam, 16) < 0 Then $iScale = 0.9
_GDIPlus_GraphicsTranslateTransform($g_hGfx_Buffer, -$aInfo[0], -$aInfo[1], True)
_GDIPlus_GraphicsScaleTransform($g_hGfx_Buffer, $iScale, $iScale, True)
_GDIPlus_GraphicsTranslateTransform($g_hGfx_Buffer, $aInfo[0], $aInfo[1], True)
EndSwitch
_Draw()
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOUSEWHEEL
Func _Draw()
_GDIPlus_GraphicsClear($g_hGfx_Buffer, 0xFFFFFFFF)
_GDIPlus_GraphicsDrawImage($g_hGfx_Buffer, $g_hImage, 60, 70)
_GDIPlus_GraphicsDrawImage($g_hGraphics, $g_hBmp_Buffer, 0, 0)
EndFunc ;==>_Draw
Func _Exit()
_GDIPlus_ImageDispose($g_hImage)
_GDIPlus_GraphicsDispose($g_hGfx_Buffer)
_GDIPlus_BitmapDispose($g_hBmp_Buffer)
_GDIPlus_GraphicsDispose($g_hGraphics)
_GDIPlus_Shutdown()
GUIDelete($g_hGUI)
Exit
EndFunc ;==>_Exit