Sign in to follow this  
Followers 0
realkiller

gui problems

2 posts in this topic

Hi i got a problem getting normal gui stuff working like creating a Button, this is a costumized verzion where u can use png images

#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#Include <File.au3>
#include <Array.au3>


Global Const $AC_SRC_ALPHA      = 1
Global Const $ULW_ALPHA         = 2
Global $old_string = "", $runthis = ""
Global $launchDir = @DesktopDir


_GDIPlus_Startup()
$pngSrc = @scriptdir&"\LaunchySkin.png"
$hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
$width =  _GDIPlus_ImageGetWidth ($hImage)
$height = _GDIPlus_ImageGetHeight($hImage)

; Create layered window

$GUI = GUICreate("Remote 4U", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
$Button_1 = GUICtrlCreateButton("Run Notepad", 10, 30, 100)
SetBitMap($GUI, $hImage, 0)
; Register notification messages


GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()
WinSetOnTop($gui,"",1)

;fade in png background
for $i = 0 to 255 step 10
    SetBitMap($GUI, $hImage, $i)
next


; create child MDI gui window to hold controls
; this part could use some work - there is some flicker sometimes...
$controlGui = GUICreate("ControlGUI", $width, $height, 0,0,$WS_POPUP,BitOR($WS_EX_LAYERED,$WS_EX_MDICHILD),$gui)

; child window transparency is required to accomplish the full effect, so $WS_EX_LAYERED above, and
; I think the way this works is the transparent window color is based on the image you set here:
GUICtrlCreatePic(@ScriptDir & "\grey.gif",0,0,$width,$height)
GuiCtrlSetState(-1,$GUI_DISABLE)

; just a text label
GUICtrlCreateLabel("Robiebab",65,5,140,50)
GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1,0xFFFFFF)




GUISetState()




While 1
    $msg = GUIGetMsg()
    Select
                    Case $msg = $Button_1
                Run('Notepad.exe') 
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop

            ExitLoop
    EndSelect
WEnd
AdlibDisable ()



if $runthis <> "" then 
    if fileexists($launchDir & "\" & $runthis) then 
        beep(1000,50)
        beep(2000,50)
        _ShellExecute($runthis, "", $launchDir)
    EndIf
EndIf

GUIDelete($controlGui)
;fade out png background
for $i = 255 to 0 step -10
    SetBitMap($GUI, $hImage, $i)
next

; Release resources
_WinAPI_DeleteObject($hImage)
_GDIPlus_Shutdown()




; ====================================================================================================

; Handle the WM_NCHITTEST for the layered window so it can be dragged by clicking anywhere on the image.
; ====================================================================================================


Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
  if ($hWnd = $GUI) and ($iMsg = $WM_NCHITTEST) then Return $HTCAPTION
EndFunc

; ====================================================================================================


; 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


; I don't like AutoIt's built in ShellExec. I'd rather do the DLL call myself.
Func _ShellExecute($sCmd, $sArg="", $sFolder = "", $rState = @SW_SHOWNORMAL)
   $aRet = DllCall("shell32.dll", "long", "ShellExecute", _
      "hwnd",   0, _
      "string", "", _
      "string", $sCmd, _
      "string", $sArg, _
      "string", $sFolder, _
      "int",    $rState)
   If @error Then Return 0
       
   $RetVal = $aRet[0]
   If $RetVal > 32 Then
       Return 1
   else  
    Return 0
   EndIf
EndFunc

Share this post


Link to post
Share on other sites



If the $Button_1 = GUICtrlCreateButton("Run Notepad", 10, 30, 100) is moved to below the

; just a text label

GUICtrlCreateLabel("Robiebab",65,5,140,50)

GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)

GUICtrlSetColor(-1,0xFFFFFF)

The button will be top most in the layers. And will be visible.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0