Code: Select all
#TVM_GETITEMSTATE = #TV_FIRST + 39
#TVM_MAPHTREEITEMTOACCID = #TV_FIRST + 43
Procedure TreeCallback(hWnd, uMsg, wParam, lParam)
Protected *nml.NM_TREEVIEW
If uMsg = #WM_NOTIFY
*nml = lParam
Select *nml\hdr\code
Case #NM_CLICK
tch.TC_HITTESTINFO
GetCursorPos_(tch\pt)
MapWindowPoints_(#Null,GadgetID(0),tch\pt,1)
Protected ItenHandle = SendMessage_(GadgetID(0), #TVM_HITTEST,0, tch)
If tch\flags = 64 ; check box
ItemIndex = SendMessage_(GadgetID(0), #TVM_MAPHTREEITEMTOACCID, ItenHandle, 0)-1
ItemState = SendMessage_(GadgetID(0), #TVM_GETITEMSTATE, ItenHandle, #TVIS_STATEIMAGEMASK)
If ItemState >> 12 = 1
Debug "item ("+Str(ItemIndex)+") checked"
ElseIf ItemState >> 12 = 2
Debug "item ("+Str(ItemIndex)+") unchecked"
EndIf
EndIf
EndSelect
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 180, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@TreeCallback())
TreeGadget(0, 10, 10, 160, 160, #PB_Tree_CheckBoxes)
node=0
For i=0 To 100
AddGadgetItem (0, -1, "Item "+Str(i), 0, node)
node+1
If node = 9
node=0
EndIf
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf