#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>

$Debug_TV = False ; Проверяет ClassName передаваемый в функции. Установите True и используйте дескриптор от другого элемента, чтобы увидеть как это работает

Global $hImage, $hStateImage

_Main()

Func _Main()

	Local $hItem[10], $hChildItem[20], $iYItem = 0, $hTreeView, $CursorInfo
	Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)

	GUICreate("Тест области нажатия", 400, 300)

	$hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
	GUISetState()

	_CreateNormalImageList()
	_GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)

	_CreateStateImageList()
	_GUICtrlTreeView_SetStateImageList($hTreeView, $hStateImage)

	_GUICtrlTreeView_BeginUpdate($hTreeView)
	For $x = 0 To 9
		$hItem[$x] = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] Пункт", $x), 4, 5)
		_GUICtrlTreeView_SetStateImageIndex($hTreeView, $hItem[$x], 1)
		For $y = 1 To 2
			$hChildItem[$iYItem] = _GUICtrlTreeView_AddChild($hTreeView, $hItem[$x], StringFormat("[%02d] Дочерний", $y), 0, 3)
			_GUICtrlTreeView_SetStateImageIndex($hTreeView, $hChildItem[$iYItem], 1)
			$iYItem += 1
		Next
	Next
	_GUICtrlTreeView_EndUpdate($hTreeView)

	_GUICtrlTreeView_SelectItem($hTreeView, $hItem[0])
	_GUICtrlTreeView_SetStateImageIndex($hTreeView, $hItem[0], 2)

	; Цикл выполняется, пока окно не будет закрыто
	Do
		$CursorInfo = GUIGetCursorInfo()
		If @error Then
			ToolTip('')
		Else
			$CursorInfo[0] -=2
			$CursorInfo[1] -=2
			ToolTip('x=' & $CursorInfo[0] & ', y=' & $CursorInfo[1] & ', ' & _GetHitString(_GUICtrlTreeView_HitTest($hTreeView, $CursorInfo[0], $CursorInfo[1])))
		EndIf
		Sleep(10)
	Until GUIGetMsg() = $GUI_EVENT_CLOSE
	GUIDelete()
EndFunc   ;==>_Main

Func _GetHitString($iResult)
	Switch $iResult
		Case 1
			Return "В клиентской области, но ниже последнего пункта"
		Case 2
			Return "На иконке пункта"
		Case 4
			Return "На тексте пункта"
		Case 8
			Return "В отступах пункта"
		Case 16
			Return "На кнопке развернуть/свернуть пункт"
		Case 32
			Return "В области справа от пункта"
		Case 64
			Return "На иконке состояния"
		Case 128
			Return "Выше клиентской области"
		Case 256
			Return "Ниже клиентской области"
		Case 512
			Return "Справа от клиентской области"
		Case 1024
			Return "Слева от клиентской области"
	EndSwitch
EndFunc   ;==>_GetHitString

Func _CreateNormalImageList()
	$hImage = _GUIImageList_Create(16, 16, 5, 3)
	_GUIImageList_AddIcon($hImage, "shell32.dll", 110)
	_GUIImageList_AddIcon($hImage, "shell32.dll", 131)
	_GUIImageList_AddIcon($hImage, "shell32.dll", 165)
	_GUIImageList_AddIcon($hImage, "shell32.dll", 168)
	_GUIImageList_AddIcon($hImage, "shell32.dll", 137)
	_GUIImageList_AddIcon($hImage, "shell32.dll", 146)
EndFunc   ;==>_CreateNormalImageList

Func _CreateStateImageList()
	$hStateImage = _GUIImageList_Create(16, 16, 5, 3)
	_GUIImageList_AddIcon($hStateImage, "shell32.dll", 3)
	_GUIImageList_AddIcon($hStateImage, "shell32.dll", 4)
EndFunc   ;==>_CreateStateImageList