qwert Posted November 19, 2007 Posted November 19, 2007 This script is on the forums as a way to modify the style of a window (and it works fine). But can someone please explain how the variable $Style is being used? It seems to have two -- or even three -- entirely different usages.expandcollapse popup;The function WinSetStyle() can set styles not only for AutoIt GUI, and for other windows too. #include <GuiConstants.au3> $NewStyle = False $Gui = GUICreate("Gui Style", 260, 100) $Style = GUICtrlCreateButton("Set Style", 45, 50, 150, 20) GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case - 3 Exit Case $Style If Not $NewStyle Then WinSetStyle($Gui, $WS_POPUPWINDOW + $WS_THICKFRAME, $WS_EX_CLIENTEDGE + $WS_EX_TOOLWINDOW) GUICtrlSetData($Style, 'Undo Style') $NewStyle = True Else WinSetStyle($Gui) GUICtrlSetData($Style, 'Set Style') $NewStyle = False EndIf EndSwitch WEnd ;Set Window Styles Func WinSetStyle($hWnd, $Style = -1, $ExStyle = 0) Local Const $GWL_STYLE = -16 Local Const $GWL_EXSTYLE = -20 Local Const $SWP_NOMOVE = 0x2 Local Const $SWP_NOSIZE = 0x1 Local Const $SWP_SHOWWINDOW = 0x40 Local Const $SWP_NOZORDER = 0x4 Local $iFlags = BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOMOVE, $SWP_NOZORDER) If $Style = -1 Then $Style = $WS_MINIMIZEBOX + $WS_CAPTION + $WS_POPUP + $WS_SYSMENU DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "int", $Style) DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_EXSTYLE, "int", $ExStyle) DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", 0, "int", 0, _ "int", 0, "int", 0, "int", $iFlags) EndFuncThanks for any help.
PsaltyDS Posted November 19, 2007 Posted November 19, 2007 This script is on the forums as a way to modify the style of a window (and it works fine). But can someone please explain how the variable $Style is being used? It seems to have two -- or even three -- entirely different usages. Thanks for any help. Confusing example. The $Style variable in the GuiGetMsg() loop has nothing to do with the $Style variable inside the WinSetStyle() function. The first is a Global scope variable used to hold the control ID of the GUI button. The second is a Local scope variable used only internally to the WinSetStyle() function to represent the actual 32bit numeric style parameter. This has the Control ID variable renamed for clarity: expandcollapse popup;The function WinSetStyle() can set styles not only for AutoIt GUI, and for other windows too. #include <GuiConstants.au3> $NewStyle = False $Gui = GUICreate("Gui Style", 260, 100) $StyleButton = GUICtrlCreateButton("Set Style", 45, 50, 150, 20) GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case - 3 Exit Case $StyleButton If Not $NewStyle Then WinSetStyle($Gui, $WS_POPUPWINDOW + $WS_THICKFRAME, $WS_EX_CLIENTEDGE + $WS_EX_TOOLWINDOW) GUICtrlSetData($StyleButton, 'Undo Style') $NewStyle = True Else WinSetStyle($Gui) GUICtrlSetData($StyleButton, 'Set Style') $NewStyle = False EndIf EndSwitch WEnd ;Set Window Styles Func WinSetStyle($hWnd, $Style = -1, $ExStyle = 0) Local Const $GWL_STYLE = -16 Local Const $GWL_EXSTYLE = -20 Local Const $SWP_NOMOVE = 0x2 Local Const $SWP_NOSIZE = 0x1 Local Const $SWP_SHOWWINDOW = 0x40 Local Const $SWP_NOZORDER = 0x4 Local $iFlags = BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOMOVE, $SWP_NOZORDER) If $Style = -1 Then $Style = $WS_MINIMIZEBOX + $WS_CAPTION + $WS_POPUP + $WS_SYSMENU DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "int", $Style) DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_EXSTYLE, "int", $ExStyle) DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", 0, "int", 0, _ "int", 0, "int", 0, "int", $iFlags) EndFunc Hope that helps! Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
qwert Posted November 20, 2007 Author Posted November 20, 2007 That explains everything I was confused about. So can global variables be referenced inside a function? -- or are the two usages mutually exclusive? Thanks very much for your response.
dani Posted November 20, 2007 Posted November 20, 2007 That explains everything I was confused about.So can global variables be referenced inside a function? -- or are the two usages mutually exclusive?Thanks very much for your response.Yes, global variables can be accessed in a function - hence the name. By default, variables declared inside a function have a local scope - only accessible inside that same function.I think reading the Variable Documentation will also clear things up a bit for you. Good luck
qwert Posted November 20, 2007 Author Posted November 20, 2007 Actually, I had read most of the section of variables, but it was this sentence that seemed to say they were the same:By default when variables are declared using Dim or assigned in a function they have Local scope unless there is a global variable of the same nameThe unless threw me.Anyway, thanks for the clarification.
dani Posted November 20, 2007 Posted November 20, 2007 Actually, I had read most of the section of variables, but it was this sentence that seemed to say they were the same:The unless threw me.Anyway, thanks for the clarification.The unless means if you have declared a global variable $Count and set it to 5, then call a function which sets $Count to 3, the GLOBAL $Count will be changed to 3, you do not create a LOCAL $Count variable. Ofcourse you can do this by placing Local in front of the $Count in the function But I wouldn't recommend using the same var name in different scopes.
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