﻿#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>

#include 'WindowDocking.au3'
Opt('TrayAutoPause', 0)

Global $sMsg = 'Das ist ein Testfenster!\rBeim verschieben dockt es an den Bildschirmrändern bzw. der Taskleiste an.\rDas funktioniert auch mit mehreren Bildschirmen.\rWenn man beim ziehen des Fensters zusätzlich die rechte Maustaste gedrückt hält, dann ist das Docking vorübergehend abgeschaltet.\rSo kann man von einem Bildschirm zum Nächsten wechseln.'
Global $ahGui[3], $aidDocking[3], $aidMagBorder[3], $aMsg, $iCount

For $i = 0 To UBound($ahGui) - 1 ; drei Testfenster erstellen
	$ahGui[$i] = GUICreate('Docking Fenster ' & $i + 1, 500, 300, 100 + $i * 100, 100 + $i * 100)
	GUISetBkColor(0x66AAFF)
	GUISetFont(12, 400, 0, 'Verdana')
	GUICtrlCreateLabel(StringFormat($sMsg), 10, 10, 480, 210)
	$aidDocking[$i] = GUICtrlCreateCheckbox('Docking eingeschaltet', 20, 230, 300, 24)
	GUICtrlSetState(-1, $GUI_CHECKED)
	$aidMagBorder[$i] = GUICtrlCreateCombo('', 20, 260, 70, 24, $CBS_DROPDOWNLIST)
	GUICtrlSetData(-1, '20|50|100|200', 50)
	GUICtrlCreateLabel('Pixel breiter "Magnetischer Rahmen"', 100, 264, 380, 24)
	GUISetState(@SW_SHOW, $ahGui[$i])
	_WindowDocking_Add($ahGui[$i])
Next

; "WinMove" funktioniert bei den Docking-Fenstern nicht, deshalb "_WinAPI_SetWindowPos" um $WM_WINDOWPOSCHANGING zu umgehen
_WinAPI_SetWindowPos($ahGui[0], 0, 20000, 150, 0, 0, BitOR($SWP_NOSIZE, $SWP_NOSENDCHANGING)) ; Fenster 1 testweise ausserhalb des Desktop verschieben,
; um die folgende Funktion zu testen (damit wird das Fenster auf dem am naechsten liegenden Bildschirm zentriert)
_WindowDocking_SetVisible($ahGui[0])

While True
	$aMsg = GUIGetMsg(1)
	Switch $aMsg[0] ; $aMsg[0] = Event-ID or Ctrl-ID
		Case $GUI_EVENT_CLOSE
			GUIDelete($aMsg[1]) ; $aMsg[1] = Window-Handle
			$iCount = UBound($ahGui) ; Anzahl der Testfenster
			For $i = 0 To UBound($ahGui) - 1
				If Not WinExists($ahGui[$i]) Then $iCount -= 1 ; wenn Fenster geschlossen, dann $iCount um eins verringern
			Next
			If $iCount = 0 Then Exit ; wenn alle Fenster geschlossen, dann Programm beenden
		Case $aidDocking[0], $aidDocking[1], $aidDocking[2]
			If BitAND(GUICtrlRead($aMsg[0]), $GUI_CHECKED) Then ; wenn der Haken gesetzt ist, dann...
				_WindowDocking_Add($aMsg[1]) ; das Fenster zum Docking hinzufuegen
			Else ; ansonsten
				_WindowDocking_Remove($aMsg[1]) ; das Fenster vom Docking entfernen
			EndIf
		Case $aidMagBorder[0], $aidMagBorder[1], $aidMagBorder[2] ; wenn sich der Wert der Combobox geaendert hat, dann...
			_WindowDocking_SetMagneticBorder($aMsg[1], Number(GUICtrlRead($aMsg[0]))) ; den neuen Wert an das Docking uebermitteln
	EndSwitch
WEnd

