Problema con GDI+

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
konejo
Mensajes: 1
Registrado: 30 Ago 2016, 04:28

Problema con GDI+

Mensaje por konejo »

Hola me paso muchas veces por aquí porque me interesa este tema de Autoit... Tengo un pequeño problema quise hacer un programa en el que usar una imagen .png de fondo (como si fuera la Form) y ahora nose como o donde poner los checkbox, etc.. porque los he probado a poner en todas partes y no funciona algo tengo que hacer mal.. Me gustaría saber como hacer para que se mostrasen..

Código: Seleccionar todo

#RequireAdmin
#include <ButtonConstants.au3>
#include <MsgBoxConstants.au3>
#include <StructureConstants.au3>
#include <WinAPIConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <NoMadMemory.au3>
#include <Sound.au3>

;Un checkbox que utilizo $Checkbox1 = GUICtrlCreateCheckbox("NO FUNCIONA", 144, 40, 65, 17)
;Un button $Button1 = GUICtrlCreateButton("Exit", 136, 64, 75, 25)
_GDIPlus_Startup()
Global Const $SC_DRAGMOVE = 0xF012
Global $iW, $iH, $hImage, $hBitmap, $hGUI
$hImage = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\fondo.png")
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
$hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
GUISetState(@SW_SHOW)
 $handle = _SoundOpen(@ScriptDir & "\recession.mp3");Lo único que me ha funcionado la música xD
_SoundPlay($handle)
_WinAPI_BitmapDisplayTransparentInGUI($hBitmap, $hGUI)
GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_WinAPI_DeleteObject($hBitmap)
_GDIPlus_BitmapDispose($hImage)
_GDIPlus_Shutdown()
GUIDelete()

Func _WinAPI_BitmapDisplayTransparentInGUI(ByRef $hHBitmap, ByRef $hGUI, $iOpacity = 0xFF, $bReleaseGDI = True)
    If Not BitAND(GUIGetStyle($hGUI)[1], $WS_EX_LAYERED) = $WS_EX_LAYERED Then Return SetError(1, 0, 0)
    Local $tDim = DllStructCreate($tagBITMAP)
    If Not _WinAPI_GetObject($hHBitmap, DllStructGetSize($tDim), DllStructGetPtr($tDim)) Then Return SetError(2, 0, 0)
    Local $tSize = DllStructCreate($tagSIZE), $tSource = DllStructCreate($tagPOINT), $tBlend = DllStructCreate($tagBLENDFUNCTION)
    Local Const $hScrDC = _WinAPI_GetDC(0), $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC), $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap)
    $tSize.X = $tDim.bmWidth
    $tSize.Y = $tDim.bmHeight
    $tBlend.Alpha = $iOpacity
    $tBlend.Format = 1
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, DllStructGetPtr($tSize), $hMemDC, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlend), $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteDC($hMemDC)
    If $bReleaseGDI Then _WinAPI_DeleteObject($hHBitmap)
    Return True
EndFunc

Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
 EndFunc   ;==>_WM_LBUTTONDOWN
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Problema con GDI+

Mensaje por Dany »

Hola. Puedes hacer algo así.

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage
Global Const $SC_DRAGMOVE = 0xF012

; Create GUI
$hGUI = GUICreate("Show PNG", 200, 200, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
GUISetBkColor(0x01, $hGUI)
GUISetState()
_WinAPI_SetLayeredWindowAttributes($hGUI, 0x01, 0xFF, 3)
; Load PNG image
_GDIPlus_StartUp()
$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir& "\1.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
$Button1=GUICtrlCreateButton("Hola",10,10)


GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

While 1
	$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $Button1
				MsgBox(0,"","Chao!!!!",0,$hGUI)
				ExitLoop
			Case $GUI_EVENT_PRIMARYDOWN
				_SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
	EndSwitch
WEnd

; Clean up resources
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()
Exit

; Draw PNG image
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
	_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
	_WinAPI_RedrawWindow($hGUI, 0, 0, 1)
	Return $GUI_RUNDEFMSG
EndFunc

Saludos :smt027
  • ............................................Imagen
    ......................................Imagen
Responder