Code: Select all
#CheckBoxYes = 0
#CheckboxNo = 1
Procedure WinCallback(hwnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*nmhdr.NMHDR = lParam
;- Get the gadget #
gad = GetDlgCtrlID_(*nmhdr\hwndFrom)
;- If the # matches our TreeGadget, proceed
If *nmhdr\code = #NM_CUSTOMDRAW And gad = 1
*tvcd.NMTVCUSTOMDRAW= lParam
*tvcd\nmcd\lItemlParam
item = *tvcd\nmcd\lItemlParam
;- See if the checkbox is set to on or off
onoff = GetGadgetItemData(gad, item)
;- If it's set to off, prevent the checkbox from displaying
If onoff
tvi.TV_ITEM
tvi\mask = #TVIF_HANDLE | #TVIF_STATE
tvi\hItem = GadgetItemID(gad, item)
tvi\state = 0
tvi\stateMask = #TVIS_STATEIMAGEMASK
SendMessage_(*nmhdr\hwndFrom, #TVM_SETITEM, 0, tvi)
EndIf
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 400, 380, "Sparked TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(1, 180, 10, 160, 360, #PB_Tree_CheckBoxes)
SetWindowCallback(@WinCallback())
For a = 0 To 1
AddGadgetItem (1, -1, "Normal Item "+Str(a), 0, 0)
AddGadgetItem (1, -1, "Node "+Str(a), 0, 0)
AddGadgetItem(1, -1, "Sub-Item 1", 0, 1)
AddGadgetItem(1, -1, "Sub-Item 2", 0, 1)
AddGadgetItem(1, -1, "Sub-Item 3", 0, 1)
AddGadgetItem(1, -1, "Sub-Item 4", 0, 1)
AddGadgetItem (1, -1, "File "+Str(a), 0, 0)
Next a
;- Remove checkbox for item 0
SetGadgetItemData(1, 0, #CheckboxNo)
;- Remove checkbox for items 2 thru 5
For i = 2 To 5
;- We store the on/off switch
SetGadgetItemData(1, i, #CheckboxNo)
Next i
;- Remove checkbox for items 9 thru 12
For i = 9 To 12
;- We store the on/off switch
SetGadgetItemData(1, i, #CheckboxNo)
Next i
SetGadgetItemState(1, 1, #PB_Tree_Expanded)
SetGadgetItemState(1, 1, #PB_Tree_Checked)
SetGadgetItemState(1, 8, #PB_Tree_Expanded)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
End