Zinthose Posted June 26, 2008 Share Posted June 26, 2008 (edited) Someone else did something similar but for the life of me I can not find the original post. When / if I do I'll post credit here.EDIT: Found it!! _GuiCtrlMakeTransThe original post displayed a form with controls on it that was translucent. I wanted to do the same on a child form but his original code caused the controls to offset from their original positions. Apparently it's an issue with setting up a border less parent window. The child windows client area is not updated and it wants to stay at, using a pseudocode reference, ParentLeft + WindowFrameThickness and ParrentTop + CationBarHeight + WindowFrameThickness.This might be an AutoIt bug or a windows bug, either way... annoying. If it is an AutoIt bug, it remained in the BETA as well as I also tried it there. /Sigh this is sounding too much like a bug report....Anyway here is my crappy demo expandcollapse popup;## Zin's Transparrent Controls on MDI Demo ://////= #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> ://////= ://////=& Const $AlphaMax = 240 Const $AlphaMin = 10 Const $AlphaInterval = 10 Dim $AlphaSpeed = 5 ://////=& ://////= Dim $guiParrent = GUICreate("Sample GUI", 275, 0, Default, Default) GUISetState() ://////= ://////= Dim $guiChild = GUICreate("Sample MDI", 275, 174, Default, Default, $WS_POPUP, BitOR($WS_EX_MDICHILD, $WS_EX_LAYERED), $guiParrent) GUICtrlCreatePic(@WindowsDir & "\winnt256.bmp", 0, 0, 275, 174, $WS_CLIPSIBLINGS) GUICtrlSetState(-1, $GUI_DISABLE) Dim $OkButton = GUICtrlCreateButton("Don't Click Me Bro", 0, 174, 275) Dim $hwndOkButton = _GuiCtrlMakeTrans(-1, $AlphaMax) Dim $Processing = GUICtrlCreateLabel("Processing ...", 0, 0, 275, 20, $SS_CENTER) GUICtrlSetFont(-1, 12, 400, 0, 'Arial Bold') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) Dim $hwndProcessing = _GuiCtrlMakeTrans(-1, $AlphaMax) GUISetState() ://////= ://////= Dim $FadeTimer = TimerInit() Dim $AlphaVal = $AlphaMax While 1 If TimerDiff($FadeTimer) >= $AlphaInterval Then If $AlphaVal >= $AlphaMax Or $AlphaVal <= $AlphaMin Then $AlphaSpeed = -$AlphaSpeed If $AlphaVal > $AlphaMax Then $AlphaVal = $AlphaMax If $AlphaVal < $AlphaMin Then $AlphaVal = $AlphaMin $AlphaVal += $AlphaSpeed WinSetTrans($hwndOkButton, '', $AlphaVal) WinSetTrans($hwndProcessing, '', -$AlphaVal) $FadeTimer = TimerInit() EndIf Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $OkButton GUICtrlSetData($OkButton, "!OUCH! Stop Clicking ME!") EndSwitch WEnd ://////= ://////= Func _GuiCtrlMakeTrans($iCtrlID, $iTrans = 255) Local $pHwnd, $hWnd, $nHwnd, $aPos, $a ;## Get the Control's Handle $hWnd = GUICtrlGetHandle($iCtrlID) If $hWnd = 0 Then Return SetError(1, 1, 0) ;## Get the Control's Parrent Window Handle. $pHwnd = _WinGetParent($hWnd) If $pHwnd = 0 Then Return SetError(1, 2, 0) #cs REMOVED DUE TO INCOMPATIBILITY WITH MDI PARRENT WINDOWS REPLACED WITH ABSOLUTE METHOD ;## Get the relative position of the control. $aPos = ControlGetPos($pHwnd,"",$hWnd) If @error then Return SetError(1,3,0) #CE ;## Get Absolute position of the control. $aPos = WinGetPos($hWnd) If @error Then Return SetError(1, 3, 0) ;## Great a container GUI Window to hold the control $nHwnd = GUICreate("", Default, Default, Default, Default, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $pHwnd) If $nHwnd = 0 Then Return SetError(1, 4, 0) ;## Move the container window to the original position of the control. WinMove($nHwnd, '', $aPos[0], $aPos[1], $aPos[2], $aPos[3]) ;## Change the parrent of the control to the new gui $a = DllCall("User32.dll", "hwnd", "SetParent", "hwnd", $hWnd, "hwnd", $nHwnd) If $a[0] = 0 Then Return SetError(1, 5, 0) ;## Move the control to 0,0 of the new Parrent GUI. If Not ControlMove($nHwnd, '', $hWnd, 0, 0) Then Return SetError(1, 6, -1) ;## Display the new parrent GUI GUISetState(@SW_SHOW, $nHwnd);show the new child gui ;## Set the Transparency WinSetTrans($nHwnd, "", $iTrans);set the transparency If @error Then Return SetError(1, 7, 0) ;## switch back to the parent Gui GUISwitch($pHwnd) ;## Return the handle for the new Child gui Return $nHwnd EndFunc ;==>_GuiCtrlMakeTrans Func _WinGetParent($Childhwnd) Local $Return $Return = DllCall("User32.dll", "hwnd", "GetParent", "hwnd", $Childhwnd) Return $Return[0] EndFunc ;==>_WinGetParent #EndRegion | Functions Edited June 26, 2008 by Zinthose --- TTFN Link to comment Share on other sites More sharing options...
Michel Claveau Posted June 26, 2008 Share Posted June 26, 2008 Hi! Cool & amusing. Thanks. Link to comment Share on other sites More sharing options...
gseller Posted June 27, 2008 Share Posted June 27, 2008 Haha, Do't Click Me Bro.. Too Funny Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now