Код:
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>
Global Const $AC_SRC_ALPHA = 1
Global $launchDir = @DesktopDir, $GUI1
Global $iExitLoop = False
$pngSrc = @ScriptDir & "\1.PNG"
Local $iOpacity = 255, $EnableFade = True
Local $hImage, $width, $height, $BtnExit
;~ If $iOpacity < 0 Then $iOpacity = 0
;~ If $iOpacity > 255 Then $iOpacity = 255
; Load PNG file as GDI bitmap
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
; Extract image width and height from PNG
$width = _GDIPlus_ImageGetWidth($hImage)
$height = _GDIPlus_ImageGetHeight($hImage)
; Create layered window
$GUI1 = GUICreate("", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
;~ WinSetOnTop($GUI1, "", 1)
GUISetState(@SW_SHOW)
$GUI2 = GUICreate("", $width, $height - 500, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
;~ WinSetOnTop($GUI2, "", 1)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
GUIRegisterMsg($WM_LBUTTONUP, "WM_LBUTTONUP")
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED")
$GUI3 = GUICreate("", $width - 1000, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
;~ WinSetOnTop($GUI3, "", 1)
GUISetState(@SW_SHOW)
GUISetState()
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
GUIRegisterMsg($WM_LBUTTONUP, "WM_LBUTTONUP")
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED")
If $EnableFade Then
;fade in png background
For $i = 0 To $iOpacity Step 1
SetBitmap($GUI1, $hImage, $i)
SetBitmap($GUI2, $hImage, $i)
SetBitmap($GUI3, $hImage, $i)
Next
Else
SetBitmap($GUI1, $hImage, $iOpacity)
SetBitmap($GUI2, $hImage, $iOpacity)
SetBitmap($GUI3, $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_PRIMARYDOWN
$1Pos = WinGetPos($Gui1)
$2Pos = WinGetPos($Gui2)
ConsoleWrite("$1Pos[0] = " & $1Pos[0] & @LF)
ConsoleWrite("$2Pos[0] = " & $2Pos[0] & @LF)
ConsoleWrite("$1Pos[1] = " & $1Pos[1] & @LF)
ConsoleWrite("$2Pos[1] = " & $2Pos[1] & @LF)
WinMove($Gui3, "", ($1Pos[0] + $2Pos[0]) / 2, ($1Pos[1] + $2Pos[1]) / 2, 30, 30)
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($GUI1, $hImage, $i)
SetBitmap($GUI2, $hImage, $i)
SetBitmap($GUI3, $hImage, $i)
Next
Else
SetBitmap($GUI1, $hImage, 0)
SetBitmap($GUI2, $hImage, 0)
SetBitmap($GUI3, $hImage, 0)
EndIf
; 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
Почему у меня картинка которая должна быть посередине исчезает?
Спасибо