;~ AutoIt Version: 3.3.14.5
#include <GUIConstants.au3>
#include <GDIPlus.au3>
Global Enum $CORNER_LEFTTOP, $CORNER_LEFTBOTTOM, $CORNER_RIGHTTOP, $CORNER_RIGHTBOTTOM, $CORNER_MAX
_Example()
Func _Example()
Local $hGUI = GUICreate("Пример", 800, 900)
Local $idFrame = _GUICtrlPic_CreateFrame($hGUI, "Слева.png", "Верх.png", "Справа.png", "Низ.png")
Local $aPics[$CORNER_MAX] = ["Угол -левый верхний.png", _
"Угол -левый нижний.png", _
"Угол -правый верхний.png", _
"Угол -правый нижний.png"]
For $iCorner = 0 To $CORNER_MAX - 1
$aPics[$iCorner] = _GUICtrlPic_CreateInCorner($hGUI, $aPics[$iCorner], $iCorner)
Next
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc ;==>_Example
Func _GUICtrlPic_Create($sFile, $iX, $iY, $iW = -1, $iH = -1, $iStyle = -1, $iExStyle = -1)
_GDIPlus_Startup()
Local $hBMP = IsPtr($sFile) ? $sFile : _GDIPlus_BitmapCreateFromFile($sFile)
If @error Then Return SetError(1, _GDIPlus_Shutdown(), 0)
If $iW = -1 Then $iW = _GDIPlus_ImageGetWidth($hBMP)
If $iH = -1 Then $iH = _GDIPlus_ImageGetHeight($hBMP)
Local $idPic = GUICtrlCreatePic("", $iX, $iY, $iW, $iH, $iStyle, $iExStyle)
Local $hHBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBMP)
Local $hPrevHBMP = GUICtrlSendMsg($idPic, $STM_SETIMAGE, 0, $hHBMP)
GUICtrlSetState(-1, $GUI_DISABLE)
_WinAPI_DeleteObject($hHBMP)
If $hPrevHBMP Then _WinAPI_DeleteObject($hPrevHBMP)
_GDIPlus_BitmapDispose($hBMP)
_GDIPlus_Shutdown()
Return $idPic
EndFunc ;==>_GUICtrlPic_Create
Func _GUICtrlPic_CreateFrame($hGUI, $sFileLeft, $sFileTop, $sFileRight, $sFileBottom)
Local $aWH = WinGetClientSize($hGUI)
If @error Then Return SetError(1, 0, 0)
_GDIPlus_Startup()
Local $hFrameBMP = _GDIPlus_BitmapCreateFromScan0($aWH[0], $aWH[1])
Local $hFrameGraph = _GDIPlus_ImageGetGraphicsContext($hFrameBMP)
_GDIPlus_GraphicsSetSmoothingMode($hFrameGraph, $GDIP_SMOOTHINGMODE_NONE)
_GDIPlus_GraphicsSetPixelOffsetMode($hFrameGraph, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
Local Enum $SIDE_LEFT, $SIDE_TOP, $SIDE_RIGHT, $SIDE_BOTTOM, $SIDE_MAX
Local $aFrame[$SIDE_MAX] = [$sFileLeft, $sFileTop, $sFileRight, $sFileBottom]
Local $hTexBMP, $hTex, $iTexW, $iTexH, $hTempBMP, $hTempGraph, $aXYWH[4]
For $iSide = 0 To $SIDE_MAX - 1
$hTexBMP = _GDIPlus_BitmapCreateFromFile($aFrame[$iSide])
If @error Then ContinueLoop
$iTexW = _GDIPlus_ImageGetWidth($hTexBMP)
$iTexH = _GDIPlus_ImageGetHeight($hTexBMP)
$hTex = _GDIPlus_TextureCreate($hTexBMP)
Switch $iSide
Case $SIDE_LEFT, $SIDE_RIGHT
$aXYWH[0] = ($iSide = $SIDE_RIGHT) ? $aWH[0] - $iTexW : 0
$aXYWH[1] = 0
$aXYWH[2] = $iTexW
$aXYWH[3] = $aWH[1]
Case $SIDE_TOP, $SIDE_BOTTOM
$aXYWH[0] = 0
$aXYWH[1] = ($iSide = $SIDE_BOTTOM) ? $aWH[1] - $iTexH : 0
$aXYWH[2] = $aWH[0]
$aXYWH[3] = $iTexH
EndSwitch
$hTempBMP = _GDIPlus_BitmapCreateFromScan0($aXYWH[2], $aXYWH[3])
$hTempGraph = _GDIPlus_ImageGetGraphicsContext($hTempBMP)
_GDIPlus_GraphicsSetSmoothingMode($hTempGraph, $GDIP_SMOOTHINGMODE_NONE)
_GDIPlus_GraphicsSetPixelOffsetMode($hTempGraph, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
_GDIPlus_GraphicsFillRect($hTempGraph, 0, 0, $aXYWH[2], $aXYWH[3], $hTex)
_GDIPlus_GraphicsDrawImageRect($hFrameGraph, $hTempBMP, $aXYWH[0], $aXYWH[1], $aXYWH[2], $aXYWH[3])
_GDIPlus_BrushDispose($hTex)
_GDIPlus_GraphicsDispose($hTempGraph)
_GDIPlus_BitmapDispose($hTempBMP)
_GDIPlus_BitmapDispose($hTexBMP)
Next
Local $idPic = _GUICtrlPic_Create($hFrameBMP, 0, 0, $aWH[0], $aWH[1])
_GDIPlus_GraphicsDispose($hFrameGraph)
_GDIPlus_Shutdown()
Return $idPic
EndFunc ;==>_GUICtrlPic_CreateFrame
Func _GUICtrlPic_CreateInCorner($hGUI, $sFile, $iCorner)
Local $aWH = WinGetClientSize($hGUI)
If @error Then Return SetError(1, 0, 0)
_GDIPlus_Startup()
Local $hBMP = _GDIPlus_BitmapCreateFromFile($sFile)
If @error Then Return SetError(2, _GDIPlus_Shutdown(), 0)
Local $aXYWH[4] = [0, 0, _GDIPlus_ImageGetWidth($hBMP), _GDIPlus_ImageGetHeight($hBMP)]
Switch $iCorner
Case $CORNER_LEFTBOTTOM
$aXYWH[1] = $aWH[1] - $aXYWH[3]
Case $CORNER_RIGHTTOP
$aXYWH[0] = $aWH[0] - $aXYWH[2]
Case $CORNER_RIGHTBOTTOM
$aXYWH[0] = $aWH[0] - $aXYWH[2]
$aXYWH[1] = $aWH[1] - $aXYWH[3]
EndSwitch
Local $idPic = _GUICtrlPic_Create($hBMP, $aXYWH[0], $aXYWH[1], $aXYWH[2], $aXYWH[3])
_GDIPlus_Shutdown()
Return $idPic
EndFunc ;==>_GUICtrlPic_CreateInCorner