#include <Array.au3>

#include <GuiTreeView.au3>
#include <TreeViewConstants.au3>

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)

$hGUI = GUICreate("TreeView-Bug", 242, 210, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, _ExitApp, $hGUI)

$hTV = GUICtrlCreateTreeView(8, 8, 225, 161)

$hA = GUICtrlCreateTreeViewItem("A", $hTV)
$hA1 = GUICtrlCreateTreeViewItem("A1", $hA)

$hB = GUICtrlCreateTreeViewItem("B", $hTV)
$hB1 = GUICtrlCreateTreeViewItem("B1", $hB)
$hB11 = GUICtrlCreateTreeViewItem("B1.1", $hB1)

$hC = GUICtrlCreateTreeViewItem("C", $hTV)

; ===== Der Teil dient nur dazu schnell den Controls die Events zuzuweisen =====
Local $aTmp[] = [$hA, $hA1, $hB, $hB1, $hB11, $hC]
For $i = 0 To UBound($aTmp) - 1
	GUICtrlSetOnEvent($aTmp[$i], _TreeViewItem_Click)
Next
; ===== So muss nicht unter jedem Control ein GUICtrlSetOnEvent hin =====

_GUICtrlTreeView_Expand($hTV)

;MainGUI dient als Hauptprogramm
$hMainGUI = GUICreate("Haupt GUI")
GUISetState(@SW_SHOW, $hMainGUI)

;Nun wollen wir die Hauptoberfläche disablen, da diese nicht mehr klickbar sein soll.
;Denn es taucht eine neue GUI auf auf der wir Einträge aus der TV anklicken wollen.

;Dieser Bug tritt auch auf wenn wir kein @SW_DISABLE nehmen. Nochmal @SW_SHOW hat den selben Effekt.
;Beim Benutzen des GUISetStates geht der Verweis des letzten Controls verloren.
GUISetState(@SW_SHOW, $hGUI)
GUISetState(@SW_DISABLE, $hMainGUI)

While Sleep(1000)
WEnd

Func _TreeViewItem_Click()
	;Das Array Display soll als quick'n'dirty Methode dienen eine neue GUI zu erstellen.
	;Da im _ArrayDisplay GUISetState unvermeidbar benutzt werden muss (um die GUI anzuzeigen)
	;tritt der Bug auf.
	Local $a[0]
	_ArrayDisplay($a)

	_GUICtrlTreeView_BeginUpdate($hTV)

	;Ersetzt man das -1 im GUICtrlSetOnEvent mit $hItem funktioniert es.
	;Es funktioniert mit dem -1 nur wenn man GUISwitch($hGUI) verwendet.
	;Dann wird wieder die richtige GUI ausgewählt und das Control erzeugt.
	$hItem = GUICtrlCreateTreeViewItem("Neu", @GUI_CtrlId)
	GUICtrlSetOnEvent(-1, _TreeViewItem_Click)

	_GUICtrlTreeView_EndUpdate($hTV)
EndFunc

Func _ExitApp()
	Exit
EndFunc