Multi-Line TreeGadget [Windows]
Posted: Sat Dec 19, 2015 10:38 am
Happy new year guys 

Code: Select all
#TVM_SETITEMHEIGHT = $111B
#TVM_GETITEMHEIGHT = $111C
#TVM_SETBKCOLOR = $111D
Global hBrush,hBrush2,TVH
hBrush = CreateSolidBrush_($D7FEFE)
hBrush2 = CreateSolidBrush_(GetSysColor_(#COLOR_HIGHLIGHT))
Procedure WCallback(hWnd,uMsg,wParam,lParam)
result=#PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*tvCD.NMTVCUSTOMDRAW=lParam
If *tvCD\nmcd\hdr\hwndFrom=GadgetID(0) And *tvCD\nmcd\hdr\code = #NM_CUSTOMDRAW
Select *tvCD\nmcd\dwDrawStage
Case #CDDS_PREPAINT:ProcedureReturn #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT: ProcedureReturn #CDRF_NOTIFYPOSTPAINT
Case #CDDS_ITEMPOSTPAINT
Item=*tvCD\nmcd\dwItemSpec
tvr.RECT\left=Item
SendMessage_(GadgetID(0),#TVM_GETITEMRECT,#True,@tvr)
tvi.TV_ITEM
tvi$ = Space(#MAX_PATH)
tvi\mask = #TVIF_HANDLE | #TVIF_PARAM | #TVIF_TEXT
tvi\pszText = @tvi$
tvi\cchTextMax = #MAX_PATH
tvi\hItem=Item
SendMessage_(GadgetID(0),#TVM_GETITEM,0,tvi)
SetBkMode_(*tvCD\nmcd\hdc,#TRANSPARENT)
If *tvCD\nmcd\uItemState = #CDIS_FOCUS | #CDIS_SELECTED
FillRect_(*tvCD\nmcd\hdc, tvr, hBrush2)
SetTextColor_(*tvCD\nmcd\hdc,$FFFFFF)
Else
FillRect_(*tvCD\nmcd\hdc, tvr, hBrush)
SetTextColor_(*tvCD\nmcd\hdc,0)
EndIf
If FindString(tvi$,#CRLF$) > 0
tvr\left + 2
DrawText_(*tvCD\nmcd\hdc,tvi$,Len(tvi$),tvr,#DT_WORDBREAK )
Else
TextOut_(*tvCD\nmcd\hdc,tvr\left+2,tvr\top+14,tvi$,Len(tvi$))
EndIf
ProcedureReturn #CDRF_NEWFONT
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
LoadFont(0,"Tahoma",14)
If OpenWindow(0,0,0,600,400,"TreeGadget",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)
TreeGadget(0, 10,10,580,380)
SendMessage_(GadgetID(0), #TVM_SETBKCOLOR, 0, $D7FEFE)
SetGadgetFont( 0,FontID(0))
TVH = SendMessage_(GadgetID(0),#TVM_GETITEMHEIGHT,0,0)
SendMessage_(GadgetID(0),#TVM_SETITEMHEIGHT,TVH*2,0)
AddGadgetItem (0,-1,"First Main Node"+#CRLF$+"Happ New Year",0,0)
AddGadgetItem (0,-1,"Sub Item!"+#CRLF$+"RASHAD",0,1)
AddGadgetItem (0,-1,"Second Main Level Node"+#CRLF$+"Happy New Year",0,0)
AddGadgetItem(0,-1,"Sub text",0,1)
AddGadgetItem(0,-1,"Third Node")
SetWindowCallback(@WCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
DeleteObject_(hBrush)
DeleteObject_(hBrush2)
EndIf