Что нового

Создать две картинки на одном GUI

passwd

Новичок
Сообщения
30
Репутация
0
Подскажите пожалуйста, я пытаюсь сделать GUI, в котором есть поле с картинкой и кнопка. Но только при условии, что поле с картинкой должно вмещать в себя две картинки, одна из которых PNG. Первую картинку я буду брать из скриншота, а вторую накладывать сверху на первую. Вторую картинку мне нужно перемещать, масштабировать, крутить и всё это поверх первой картинки. Всё сделал, всё почти получилось кроме одного, не могу понять как поставить первую картинку на фон за второй.

В итоге вопрос, как поместить первую картинку на фон за второй вот в таком 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
 
Автор
passwd

passwd

Новичок
Сообщения
30
Репутация
0
Вот посмотрите, сделал такой вариант:
Код:
#include <windowsconstants.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <MsgBoxConstants.au3>
#include <ScreenCapture.au3>
#include <winapi.au3>
Global Const $AC_SRC_ALPHA = 1
Global $g_hGUI, $g_hGraphics, $g_hBmp_Buffer, $g_hGfx_Buffer, $g_hImage, $controlGui
Global $g_iMouseX, $g_iMouseY
AutoItSetOption("GUIOnEventMode", 1)

    Local $sFile = @ScriptDir & "\2-f.png"
    If Not FileExists($sFile) Then
        MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", $sFile & " not found!", 30)
        Exit
    EndIf
	Local $sFile2 = @ScriptDir & "\1.bmp"
	    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 = GUICtrlCreatePic($sFile2, 8, 8, 409, 657)
$Button1 = GUICtrlCreateButton("Calculate", 424, 8, 161, 33)

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "_ResetGraphicsTransform")
GUISetState()

$C1 = GUICreate("child",409,657,0,0,$WS_POPUP,bitor($WS_EX_MDICHILD, $WS_EX_LAYERED),$g_hGUI)
GUISetBkColor(0xacbdef);set the child background to some colour which we can set as the transparent colour
$graphic = GUICtrlCreateGraphic(0, 0, 409, 657, $GUI_WS_EX_PARENTDRAG)
_WINAPI_SetLayeredWindowAttributes($C1, 0xacbdef, 255)

_GDIPlus_Startup()

    $g_hGraphics = _GDIPlus_GraphicsCreateFromHWND($C1)
    $g_hBmp_Buffer = _GDIPlus_BitmapCreateFromGraphics(409, 657, $g_hGraphics)
    $g_hGfx_Buffer = _GDIPlus_ImageGetGraphicsContext($g_hBmp_Buffer)

    $g_hImage = _GDIPlus_ImageLoadFromFile($sFile)


    GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
    GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL")
    GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSEMOVE")
    GUISetState(@SW_SHOW)

    _Draw()

    While Sleep(10)
    WEnd

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

Но дочернее окно не прозрачное, и картинку из родительского окна не видно. Если выставить _GDIPlus_GraphicsClear($g_hGfx_Buffer, "alpha") в функции Draw, то картинка из родительского окна становится видна, но PNG дочернего окна отображается плохо с какими-то шумами и оставляет за собой след при перемещении.


Добавлено:
Сообщение автоматически объединено:

Хорошо, а если попробовать вот так?

Код:
#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>

; ===============================================================================================================================
; Description ...: Shows how to create an alpha blended form
; Author ........: Paul Campbell (PaulIA)
; Notes .........: The images used for this demo MUST be 32 bpp with alpha channel
; Credits .......: Thanks to lod3n for supplying links to the technical documentation that was necessary to build this demo
; ===============================================================================================================================

; ===============================================================================================================================
; Global constants
; ===============================================================================================================================
Global Const $AC_SRC_ALPHA = 1
; ===============================================================================================================================
; Global variables
; ===============================================================================================================================
Global $g_hGUI2, $g_idSlider, $g_hImage, $sFile2, $sFile1
Global $g_hGUI, $g_hGraphics, $g_hBmp_Buffer, $g_hGfx_Buffer, $controlGui
Global $g_iMouseX, $g_iMouseY
$sFile = @DesktopDir & "\2.png"
    If Not FileExists($sFile) Then
        MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", $sFile & " not found!", 30)
        Exit
    EndIf
$sFile2 = @DesktopDir & "\1.bmp"
	If Not FileExists($sFile2) Then
        MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", $sFile2 & " not found!", 30)
        Exit
	EndIf

; Create GUI
Local $hGUI1 = GUICreate("Document", 701, 671, -1, -1)
$Graphic1 = GUICtrlCreatePic($sFile2, 8, 8, 409, 657)
GUISetState()

; Create layered child window
$g_hGUI2 = GUICreate("Hair", 250, 250, 70, 100,$WS_POPUP,bitor($WS_EX_MDICHILD, $WS_EX_LAYERED),$hGUI1)

; Load layered image
_GDIPlus_Startup()
$g_hImage = _GDIPlus_ImageLoadFromFile($sFile)
SetBitmap($g_hGUI2, $g_hImage, 255)
GUISetState()

; Register notification messages

GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")

; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

; Release resources
_GDIPlus_ImageDispose($g_hImage)
_GDIPlus_Shutdown()

; ===============================================================================================================================
; Handle the WM_HSCROLL notificaton so that we can change the opacity in real time
; ===============================================================================================================================
Func WM_HSCROLL($hWnd, $iMsg, $iParam, $lParam)
	#forceref $hWnd, $iMsg, $iParam, $lParam
	SetBitmap($g_hGUI2, $g_hImage, 255)
EndFunc   ;==>WM_HSCROLL

; ===============================================================================================================================
; Handle the WM_NCHITTEST for the layered window so it can be dragged by clicking anywhere on the image.
; ===============================================================================================================================
Func WM_NCHITTEST($hWnd, $iMsg, $iParam, $lParam)
	#forceref $hWnd, $iMsg, $iParam, $lParam
	If ($hWnd = $g_hGUI2) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc   ;==>WM_NCHITTEST


; ===============================================================================================================================
; SetBitMap
; ===============================================================================================================================
Func SetBitmap($hGUI, $hImage, $iOpacity)
	Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

	$hScrDC = _WinAPI_GetDC(0)
	$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
	$tSize = DllStructCreate($tagSIZE)
	$pSize = DllStructGetPtr($tSize)
	DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
	DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
	$tSource = DllStructCreate($tagPOINT)
	$pSource = DllStructGetPtr($tSource)
	$tBlend = DllStructCreate($tagBLENDFUNCTION)
	$pBlend = DllStructGetPtr($tBlend)
	DllStructSetData($tBlend, "Alpha", $iOpacity)
	DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
	_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
	_WinAPI_ReleaseDC(0, $hScrDC)
	_WinAPI_SelectObject($hMemDC, $hOld)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteDC($hMemDC)
EndFunc   ;==>SetBitmap

Как добавить сюда возможность масштабировать и крутить PNG из дочернего окна? Ни уж-то никто не хочет подсказать? =(


Добавлено:
Сообщение автоматически объединено:

Всё, мужики, извините, но вы не успели мне подсказать. Научился сам.

Код:
#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
;#include <WinAPI.au3>
#include <WindowsConstants.au3>
;#include <MsgBoxConstants.au3>
;#include <ButtonConstants.au3>
;#include <StaticConstants.au3>
#include <ScreenCapture.au3>
#include <File.au3>

Global $PngDirectory = @DesktopDir & "\"
Global $aFiles = _FileListToArray($PngDirectory, '*.png', 1)
If @error Then
    MsgBox(0, 'Error', 'В папке' & @LF & '"' & $PngDirectory & @LF & 'нет файлов.')
EndIf

Global Const $AC_SRC_ALPHA = 1
AutoItSetOption("GUIOnEventMode", 1)

Global $g_hGUI1, $g_hGUI2, $g_hImage, $randfile, $PNGwidth, $PNGheight

Local $hGUI1 = GUICreate("Main", 700, 500, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
GUISetBkColor(0xFFFFFF)
$Graphic1 = GUICtrlCreatePic('', 0, 0, 409, 500)
$Button1 = GUICtrlCreateButton("screen", 424, 8, 81, 33)
GUICtrlSetOnEvent(-1, "SpecialEvents")
$Button2 = GUICtrlCreateButton("changePNG", 424, 50, 81, 33)
GUICtrlSetOnEvent(-1, "SpecialEvents")
GUISetState()

; Create layered child window
$g_hGUI2 = GUICreate("Child", 250, 250, 70, 100,$WS_POPUP,bitor($WS_EX_MDICHILD, $WS_EX_LAYERED),$hGUI1)
; Register notification messages

GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUIRegisterMsg($WM_MOUSEWHEEL, "PNGSize")


While 1
    Sleep(100)
WEnd

Func _exit()
; Release resources
_GDIPlus_ImageDispose($g_hImage)
_GDIPlus_Shutdown()
	exit
EndFunc

Func SpecialEvents()
    Select
        Case @GUI_CtrlId = $Button1
            screenshot()
			changePng()
        Case @GUI_CtrlId = $Button2
			changePng()
    EndSelect
EndFunc   ;==>SpecialEvents

Func screenshot()
	Local $hBMP, $hBitmap, $hGraphic, $WindowToCapture

	WinActivate("Безымянный — Блокнот")
	$WindowToCapture = ControlGetHandle("Безымянный — Блокнот", "", "[CLASS:Edit; INSTANCE:1]")
	$hBMP = _ScreenCapture_CaptureWnd ( '', $WindowToCapture,0,0,-1,-1,False)

    ; Initialize GDI+ library
    _GDIPlus_Startup()

	WinActivate("Main")
    ; Draw bitmap to GUI
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($Graphic1))
    _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 100)

    ; Clean up resources
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_BitmapDispose($hBitmap)
    _WinAPI_DeleteObject($hBMP)

    ; Shut down GDI+ library
    _GDIPlus_Shutdown()

EndFunc;==>screenshot

Func changePng()
$randfile = $aFiles[Random(1, $aFiles[0],1)]

_GDIPlus_Startup()
$g_hImage = _GDIPlus_ImageLoadFromFile($PngDirectory & "\" & $randfile)
Local $PNGwidth = _GDIPlus_ImageGetWidth($g_hImage)
Local $PNGheight = _GDIPlus_ImageGetHeight($g_hImage)
$g_hImage = _GDIPlus_ImageResize($g_hImage, $PNGwidth/2, $PNGheight/2)
SetBitmap($g_hGUI2, $g_hImage, 255)
GUISetState()

EndFunc

Func PNGSize($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $lParam
	$PNGwidth = _GDIPlus_ImageGetWidth($g_hImage)
	$PNGheight = _GDIPlus_ImageGetHeight($g_hImage)
	$g_hImage = _GDIPlus_ImageLoadFromFile($PngDirectory & "\" & $randfile)
    Switch BitAND($wParam, 0x0000FFFF)
		Case 1
				If BitShift($wParam, 16) < 0 Then
				$PNGheight -=5
			Else
				$PNGheight +=5
			EndIf
			$g_hImage = _GDIPlus_ImageResize($g_hImage, $PNGwidth, $PNGheight)
			SetBitmap($g_hGUI2, $g_hImage, 255)
			GUISetState()
        Case Else
			If BitShift($wParam, 16) < 0 Then
				$PNGwidth -=5
				$PNGheight -=5
			Else
				$PNGwidth +=5
				$PNGheight +=5
			EndIf
			$g_hImage = _GDIPlus_ImageResize($g_hImage, $PNGwidth, $PNGheight)
			SetBitmap($g_hGUI2, $g_hImage, 255)
			GUISetState()
EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc;==>screenshot

; ===============================================================================================================================
; Handle the WM_NCHITTEST for the layered window so it can be dragged by clicking anywhere on the image.
; ===============================================================================================================================
Func WM_NCHITTEST($hWnd, $iMsg, $iParam, $lParam)
	#forceref $hWnd, $iMsg, $iParam, $lParam
	If ($hWnd = $g_hGUI2) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc   ;==>WM_NCHITTEST

; ===============================================================================================================================
; SetBitMap
; ===============================================================================================================================
Func SetBitmap($hGUI, $hImage, $iOpacity)
	Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

	$hScrDC = _WinAPI_GetDC(0)
	$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
	$tSize = DllStructCreate($tagSIZE)
	$pSize = DllStructGetPtr($tSize)
	DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
	DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
	$tSource = DllStructCreate($tagPOINT)
	$pSource = DllStructGetPtr($tSource)
	$tBlend = DllStructCreate($tagBLENDFUNCTION)
	$pBlend = DllStructGetPtr($tBlend)
	DllStructSetData($tBlend, "Alpha", $iOpacity)
	DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
	_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
	_WinAPI_ReleaseDC(0, $hScrDC)
	_WinAPI_SelectObject($hMemDC, $hOld)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteDC($hMemDC)
EndFunc   ;==>SetBitmap
 
Верх