﻿;-- TIME_STAMP   2021-01-24 00:06:54

Opt('MustDeclareVars', 1)

#include 'GuiMinMax.au3'
#include <GUIConstantsEx.au3>

_Example()

Func _Example()
	Local $hMain = GUICreate('Set Min/Max', 300, 400, 70, 70)
	GUISetFont(8.5, 0, 0, 'Consolas')
	GUIStartGroup()
	GUICtrlCreateLabel('Setting Gui', 10, 13, 80)
	Local $r1 = GUICtrlCreateRadio(' GUI 1', 140, 10, 60)
	GUICtrlSetState(-1, $GUI_CHECKED)
	Local $r2 = GUICtrlCreateRadio(' GUI 2', 220, 10, 60)
	GUICtrlCreateLabel('Minimum  width | height', 10, 43, 150)
	Local $inMinW = GUICtrlCreateInput('', 160, 40, 60, 20)
	Local $inMinH = GUICtrlCreateInput('', 230, 40, 60, 20)
	GUICtrlCreateLabel('Maximum  width | height', 10, 73, 150)
	Local $inMaxW = GUICtrlCreateInput('', 160, 70, 60, 20)
	Local $inMaxH = GUICtrlCreateInput('', 230, 70, 60, 20)
	GUICtrlCreateLabel('Minimize Button minimizes to', 10, 103, 100, 30)
	GUIStartGroup()
	Local $r3 = GUICtrlCreateRadio(' MinSize', 140, 104, 70)
	GUICtrlSetState(-1, $GUI_CHECKED)
	Local $r4 = GUICtrlCreateRadio(' Taskbar', 220, 104, 70)
	Local $cb = GUICtrlCreateCheckbox(' Using window size instead of client size', 10, 140)
	Local $btGui1 = GUICtrlCreateButton('Show Gui1', 10, 170, 80, 20)
	Local $btGui2 = GUICtrlCreateButton('Show Gui2', 100, 170, 80, 20)
	Local $btSet = GUICtrlCreateButton('Apply', 210, 170, 80, 20)
	GUICtrlCreateLabel('Possible values for min/max settings', 10, 230)
	GUICtrlCreateLabel('  -1', 10, 247)
	GUICtrlCreateLabel('Uses the current width/height', 50, 247)
	GUICtrlCreateLabel('   0', 10, 264)
	GUICtrlCreateLabel('The MinMax handling will ignored from this parameter', 50, 264, 200, 30)
	GUICtrlCreateLabel('Current Rectangle', 10, 320)
	GUICtrlCreateLabel('Window', 50, 343)
	Local $inRectW = GUICtrlCreateInput('', 120, 340, 170, 20, 0x0800) ; $ES_READONLY
	GUICtrlSetBkColor(-1, 0xFFFFFF)
	GUICtrlCreateLabel('Client', 50, 373)
	Local $inRectC = GUICtrlCreateInput('', 120, 370, 170, 20, 0x0800)
	GUICtrlSetBkColor(-1, 0xFFFFFF)

	_GuiMM_DebugRegister($inRectW, $inRectC) ; registers ID to receive current rect

	Local $hGui1 = GUICreate('Test Min/Max [1]', 400, 300, -1, 60, BitOR($WS_SYSMENU, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
	Local $hGui2 = GUICreate('Test Min/Max [2]', 400, 300, -1, 400, BitOR($WS_SYSMENU, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))


	GUISetState(@SW_SHOW, $hMain)


	Local $hWnd = $hGui1, $wMin = 0, $hMin = 0, $wMax = 0, $hMax = 0, $aSet
	Local $bMinimizeToMinSize = True, $bModeWindow = False
	Local $aMsg
	While True
		$aMsg = GUIGetMsg(1)
		Switch $aMsg[0]
			Case -3
				If $aMsg[1] = $hMain Then
					Exit
				Else
					GUISetState(@SW_HIDE, $aMsg[1])
					GUICtrlSetState(($aMsg[1] = $hGui1 ? $btGui1 : $btGui2), $GUI_ENABLE)
				EndIf
			Case $r1, $r2
				$hWnd = BitAND(GUICtrlRead($r1), $GUI_CHECKED) ? $hGui1 : $hGui2
				; [wMin, hMin, wMax, hMax, bMinimizeToMinSize, bModeWindow]
				$aSet = _GuiMM_GetMinMax($hWnd)
				If Not @error Then
					GUICtrlSetData($inMinW, $aSet[0])
					GUICtrlSetData($inMinH, $aSet[1])
					GUICtrlSetData($inMaxW, $aSet[2])
					GUICtrlSetData($inMaxH, $aSet[3])
					GUICtrlSetState(($aSet[4] ? $r3 : $r4), $GUI_CHECKED)
					GUICtrlSetState($cb, ($aSet[5] ? $GUI_CHECKED : $GUI_UNCHECKED))
				EndIf
			Case $r3, $r4
				$bMinimizeToMinSize = BitAND(GUICtrlRead($r3), $GUI_CHECKED) ? True : False
			Case $cb
				$bModeWindow = BitAND(GUICtrlRead($cb), $GUI_CHECKED) ? True : False
			Case $btGui1
				GUISetState(@SW_SHOW, $hGui1)
				GUICtrlSetState($btGui1, $GUI_DISABLE)
			Case $btGui2
				GUISetState(@SW_SHOW, $hGui2)
				GUICtrlSetState($btGui2, $GUI_DISABLE)
			Case $btSet
				$wMin = Int(GUICtrlRead($inMinW))
				$hMin = Int(GUICtrlRead($inMinH))
				$wMax = Int(GUICtrlRead($inMaxW))
				$hMax = Int(GUICtrlRead($inMaxH))
				_GuiMM_SetMinMax($hWnd, $wMin, $hMin, $wMax, $hMax, $bMinimizeToMinSize, $bModeWindow)
		EndSwitch
	WEnd
	Exit
EndFunc

