#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WinAPI.au3>

$hGUI = GUICreate("DeleteChildren-Bug", 242, 210, 192, 124)

$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)

_GUICtrlTreeView_Expand($hTV)
GUISetState(@SW_SHOW, $hGUI)

MsgBox(64, "Info", "Es wird nun _GUICtrlTreeView_DeleteChildren($hTV, $hA) aufgerufen." & @CRLF & _
				   "Ziel ist es, alle Untereelemente von A zu löschen.")

ConsoleWrite("_GUICtrlTreeView_DeleteChildren($hTV, $hA) = " & _GUICtrlTreeView_DeleteChildren($hTV, $hA) & @CRLF)
_WinAPI_InvalidateRect($hTV)

MsgBox(64, "Info", "Es wurde aber kein Unterelement gelöscht." & @CRLF & _
				   @CRLF & _
				   "Nun wird " & @CRLF & _
				   "_GUICtrlTreeView_DeleteChildren($hTV, GUICtrlGetHandle($hA))" & @CRLF & _
				   "aufgerufen.")

ConsoleWrite("_GUICtrlTreeView_DeleteChildren($hTV, GUICtrlGetHandle($hA)) = " & _GUICtrlTreeView_DeleteChildren($hTV, GUICtrlGetHandle($hA)) & @CRLF)
_WinAPI_InvalidateRect($hTV)

MsgBox(64, "Info", "Und die Unterelemente sind weg.")

#cs
	https://docs.microsoft.com/en-us/windows/desktop/controls/tvm-expand

	Im Code von _GUICtrlTreeView_DeleteChildren wird aber explizit abgefragt ob es sich bei dem übergebenen Item
	um ein hWnd Objekt handelt oder nicht, wenn nicht, dann wird die interne Funktion GUICtrlSendMsg aufgerufen.
	allerdings löscht diese die Items nicht.

	Es wird außerdem als $lParam beim Else-Zweif einfach das Item übergeben obwohl die $TVM_EXPAND eindeutig
	einen Pointer zu dem Control haben möchte und keine AutoIt-Interne Nummer, diese wird nämlich nicht angepasst abgeschickt!

	; #FUNCTION# ====================================================================================================================
	; Author ........: Paul Campbell (PaulIA)
	; Modified.......: Gary Frost (gafrost)
	; ===============================================================================================================================
	Func _GUICtrlTreeView_DeleteChildren($hWnd, $hItem)
		Local $bResult
		If IsHWnd($hWnd) Then
			$bResult = _SendMessage($hWnd, $TVM_EXPAND, BitOR($TVE_COLLAPSE, $TVE_COLLAPSERESET), $hItem, 0, "wparam", "handle")
		Else
			$bResult = GUICtrlSendMsg($hWnd, $TVM_EXPAND, BitOR($TVE_COLLAPSE, $TVE_COLLAPSERESET), $hItem)
		EndIf
		Return $bResult
	EndFunc   ;==>_GUICtrlTreeView_DeleteChildren

	Außerdem wird $TVM_EXPAND verwendet um die Items zu löschen obwohl das keinen Sinn macht, weil, wie wir
	gerade festgestellt haben, das [+] noch bleibt. Stattdessen hätte man $TVM_DELETEITEM für alle Unterelemente
	aufrufen müssen.
#ce

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd