Код:
;~ #include <GUIConstants.au3>
;~ -------------------------------------------------------
; Description :
; Written by : Alex Pougach
; Date : 22/12/2008
;
; With help of Igal Bravshtein and Creat0R
; --------------------------------------------------------
#include-once
; Transp_PNG( $temp , x , y),$temp = "E:\VBA\AutoIt\GUI\2.png"
; $temp- Doroga k file
; x - прозрачность
; y- плавность перхода
#NoTrayIcon
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>
Global Const $WM_LBUTTONDOWN = 0x0201
Global Const $WM_LBUTTONUP = 0x0202
Global Const $ULW_ALPHA = 2
Global Const $AC_SRC_ALPHA = 1
Global $launchDir = @DesktopDir, $GUI
Global $iExitLoop = False
Func Transp_PNG($temp, $iOpacity = 255, $EnableFade = True)
If $iOpacity < 0 Then $iOpacity = 0
If $iOpacity > 255 Then $iOpacity = 255
; Load PNG file as GDI bitmap
_GDIPlus_Startup()
$pngSrc = $temp
$hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
; Extract image width and height from PNG
$width = _GDIPlus_ImageGetWidth($hImage)
$height = _GDIPlus_ImageGetHeight($hImage)
; Create layered window
$GUI = GUICreate("", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
WinSetOnTop($GUI, "", 1)
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
GUIRegisterMsg($WM_LBUTTONUP, "WM_LBUTTONUP")
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED")
GUISetState()
If $EnableFade Then
;fade in png background
For $i = 0 To $iOpacity Step 1
SetBitmap($GUI, $hImage, $i)
Next
Else
SetBitmap($GUI, $hImage, $iOpacity)
EndIf
; set default button for Enter key activation - renders outside GUI window
$BtnExit = GUICtrlCreateButton("Exit", $width, $height, 10, 10, $BS_DEFPUSHBUTTON)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $BtnExit
ExitLoop
EndSwitch
If $iExitLoop Then ExitLoop
WEnd
If $EnableFade Then
;fade out png background
For $i = $iOpacity To 0 Step -1
SetBitmap($GUI, $hImage, $i)
Next
Else
SetBitmap($GUI, $hImage, 0)
EndIf
EndFunc ;==>Transp_PNG
; Handle the WM_LBUTTONDOWN for the layered window so it can be dragged by clicking anywhere on the image.
Func WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
If BitAND(WinGetState($hWnd), 32) Then Return $GUI_RUNDEFMSG
DllCall("user32.dll", "long", "SendMessage", "hwnd", $hWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0)
EndFunc ;==>WM_LBUTTONDOWN
Func WM_LBUTTONUP($hWnd, $iMsg, $wParam, $lParam)
$iExitLoop = True
EndFunc ;==>WM_LBUTTONUP
Func WM_WINDOWPOSCHANGED($hWnd, $iMsg, $wParam, $lParam)
$iExitLoop = False
EndFunc ;==>WM_WINDOWPOSCHANGED
; 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