#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
Global $iTotal_Items = 10
Global $TVItemsID_Array[$iTotal_Items + 1]
GUICreate("TreeView Check All", 460, 300)
$TreeView = GUICtrlCreateTreeView(20, 20, 420, 260, _
BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_DLGMODALFRAME + $WS_EX_CLIENTEDGE)
$SelAll_TVItem = GUICtrlCreateTreeViewItem("Select all", $TreeView)
GUICtrlSetColor($SelAll_TVItem, 0xC0C0C0)
For $i = 1 To $iTotal_Items
$TVItemsID_Array[$i] = GUICtrlCreateTreeViewItem("Item " & $i, $SelAll_TVItem)
Next
GUICtrlSetState($SelAll_TVItem, $GUI_EXPAND)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $SelAll_TVItem
Local $State = $GUI_UNCHECKED
If BitAND(GUICtrlRead($SelAll_TVItem), $GUI_CHECKED) Then
$State = $GUI_CHECKED
GUICtrlSetColor($SelAll_TVItem, 0x0)
GUICtrlSetState($SelAll_TVItem, $GUI_DEFBUTTON + $GUI_CHECKED)
Else
GUICtrlSetColor($SelAll_TVItem, 0xC0C0C0)
GUICtrlSetState($SelAll_TVItem, $GUI_UNCHECKED)
EndIf
For $a = 1 To UBound($TVItemsID_Array) - 1
GUICtrlSetState($TVItemsID_Array[$a], $State)
Next
Case $TVItemsID_Array[1] To $TVItemsID_Array[$iTotal_Items]
If AllIsUnChecked() Then
GUICtrlSetColor($SelAll_TVItem, 0xC0C0C0)
GUICtrlSetState($SelAll_TVItem, $GUI_UNCHECKED)
ElseIf AllIsChecked() Then
GUICtrlSetColor($SelAll_TVItem, 0x0)
GUICtrlSetState($SelAll_TVItem, $GUI_DEFBUTTON + $GUI_CHECKED)
Else
GUICtrlSetColor($SelAll_TVItem, 0x696969)
GUICtrlSetState($SelAll_TVItem, $GUI_CHECKED)
EndIf
EndSwitch
WEnd
Func AllIsUnChecked()
For $i = 1 To UBound($TVItemsID_Array) - 1
If BitAND(GUICtrlRead($TVItemsID_Array[$i]), $GUI_CHECKED) Then Return False
Next
Return True
EndFunc
Func AllIsChecked()
For $i = 1 To UBound($TVItemsID_Array) - 1
If BitAND(GUICtrlRead($TVItemsID_Array[$i]), $GUI_UNCHECKED) Then Return False
Next
Return True
EndFunc