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

 
 
