Code: Alles auswählen
#CDDS_ITEM = $10000
#CDDS_PREPAINT = 1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDRF_NEWFONT = 2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_DODEFAULT = 0
; --> Load our underline font
Global hFont
hFont = LoadFont(0, "Courier New", 8, #PB_Font_Underline)
Procedure WinCallback(hwnd, msg, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_NOTIFY
      *pNMHDR.NMHDR = lParam
      If *pNMHDR\code = #NM_CUSTOMDRAW And *pNMHDR\hwndFrom = GadgetID(1)
        *pTVcd.NMTVCUSTOMDRAW = lParam
        Select *pTVcd\nmcd\dwDrawStage
          Case #CDDS_PREPAINT
            result = #CDRF_NOTIFYITEMDRAW
          Case #CDDS_ITEMPREPAINT
            ; --> Here we get the text of the TreeGadget item being drawn
            tvi.TV_ITEM\mask = #TVIF_TEXT | #TVIF_HANDLE
            tviText$ = Space(100)
            tvi\pszText = @tviText$
            tvi\cchTextMax = 100
            tvi\hItem = *pTVcd\nmcd\dwItemSpec
            SendMessage_(*pNMHDR\hwndFrom, #TVM_GETITEM, 0, @tvi)
            ; --> Now we underline "Item 0" and "Item 4" in blue
            Select tviText$
              Case "Item 0"
                ; --> Select underlined font into item 0 dc
                SelectObject_(*pTVcd\nmcd\hdc, hFont)
                SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
                result = #CDRF_NEWFONT
              Case "Item 4"
                ; --> Select underlined font into item 4 dc
                SelectObject_(*pTVcd\nmcd\hdc, hFont)
                SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 200, 255))
                result = #CDRF_NEWFONT
              Default
                result = #CDRF_DODEFAULT
            EndSelect
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  TreeGadget(1, 10, 10, 160, 160)
  SetWindowCallback(@WinCallback())
  For i = 0 To 10
    AddGadgetItem (1, -1, "Item "+Str(i))
    SetGadgetItemData(1,0,-1)
  Next i
  Repeat
    event = WaitWindowEvent()
  Until event = #PB_Event_CloseWindow
EndIf
End