Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] $WS_POPUP GIF картинка с прозрачным фоном реально? (http://forum.oszone.net/showthread.php?t=179115)

Antoschka2 25-06-2010 00:19 1441196

$WS_POPUP GIF картинка с прозрачным фоном реально?
 
Всем привет, вот есть вопрос: у меня GIF картинка имеющая прозрачныи фон, так этот фон когда GUI включается отображается белым цветом. Есть ли возможность сделать фон прозрачным в GUI.
Заранее спасибо

#Include <StaticConstants.au3>
#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>
#include <GUIConstants.au3>


$MainGUI = GUICreate("Pinnwand",306,236,-1,-1,$WS_POPUP, $WS_EX_TOOLWINDOW)
GUICtrlCreatePic(@ScriptDir & "\lll.gif",0,0, 0,0)
$Exit = GUICtrlCreateButton("Beenden",387,337,100,25)
GUISetState(@SW_SHOW)






While 1
Sleep(10)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Exit
Exit
EndSwitch
WEnd

shyra1976 01-07-2010 10:23 1445064

Код:

#include "transparency.au3"

 $temp = @ScriptDir & "\1.png"
Transp_PNG($temp)










Код:

;~ -------------------------------------------------------
; Description  :
; Written by    : Alex Pougach
; Date          : 24/09/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 - prozrachnost
; y- Plavnost poiavleniia


#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($pngSrc, $iOpacity = 255, $EnableFade = True)
    Local $hImage,$width,$height,$BtnExit
;~  ConsoleWrite( $temp & @LF)
    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(0x0201, "WM_LBUTTONDOWN")
    GUIRegisterMsg(0x0202, "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, 2)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc  ;==>SetBitmap



Время: 16:49.

Время: 16:49.
© OSzone.net 2001-