I got these working in BlitzPlus:
Structure TVITEM
mask.l
hItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
iSelectedImage.l
cChildren.l
lParam.l
EndStructure
InitCommonControls_()
ProcedureDLL.l CreateImageList()
ProcedureReturn ImageList_Create_(16,16,#ILC_COLOR16,2,4)
EndProcedure
ProcedureDLL ImageListAdd(hndImgList,hndimage)
ImageList_Add_(hndImgList,hndimage,0)
EndProcedure
ProcedureDLL SetTreeViewNodeIcon(treeviewnode)
hitem=PeekL(treeviewnode+28)
hwnd=PeekL(treeviewnode+24)
TVITEM.TVITEM
TVITEM\hItem=hitem
SendMessage_(hwnd,#TVM_GETITEM,0,TVITEM.TVITEM)
TVITEM\mask=#TVIF_IMAGE+#TVIF_SELECTEDIMAGE
TVITEM\iImage=1
TVITEM\iSelectedImage=1
SendMessage_(hwnd,#TVM_SETITEM,0,TVITEM.TVITEM)
EndProcedure
Const TV_FIRST = $1100
Const TVM_GETITEMRECT = (TV_FIRST + 4)
Const TVM_SETIMAGELIST = (TV_FIRST + 9)
Const TVM_HITTEST = (TV_FIRST + 17)
Const TVM_SORTCHILDRENCB = (TV_FIRST + 21)
Const TVM_GETITEMW = (TV_FIRST + 62)
Const TVM_SETITEMW = (TV_FIRST + 63)
Const TVM_INSERTITEMW = (TV_FIRST + 50)
Const TVM_GETITEM = TV_FIRST + 62
Const TVM_SETITEM = TV_FIRST + 13
Const TVM_GETNEXTITEM = TV_FIRST + 10
Const TVM_GETITEMSTATE = TV_FIRST + 39
Const TVIS_EXPANDED = $20
Const TVGN_CARET = $9
Const TVM_GETITEM32A =(TV_FIRST+12)
Const TVM_GETITEM32W =(TV_FIRST+62)
Const TVGN_CHILD =4
Const TVM_GETCOUNT =(TV_FIRST+5)
Const TVGN_NEXT =1
Const TVS_CHECKBOXES =$0100
Const GWL_STYLE = (-16)
Const TVM_SELECTITEM =(TV_FIRST+11)
Const TVM_SORTCHILDREN =(TV_FIRST+19)
Const TVSIL_NORMAL = 0
Const TVSIL_STATE = 2
win=CreateWindow("",0,0,400,300)
tree=CreateTreeView(0,0,200,200,win)
root=TreeViewRoot(tree)
node=AddTreeViewNode("test",root)
node2=AddTreeViewNode("test2",node)
dir$=CurrentDir()
icon0=pbLoadImage(2,dir+"0.bmp")
icon1=pbLoadImage(1,dir+"1.bmp")
;ChangeDir dir
ilist=createimagelist()
ImageListAdd(ilist,icon0)
ImageListAdd(ilist,icon1)
hwnd=QueryObject(tree,1)
SendMessage hwnd,TVM_SETIMAGELIST,TVSIL_NORMAL,ilist
SetTreeViewNodeIcon(node)
Repeat : Until WaitEvent()=$803
Function SetTreeViewNodeIcon1(treeviewnode,index)
item=PeekL(treeviewnode+28)
hwnd=PeekL(treeviewnode+24)
temp=CreateBank(40)
tvitem=BankAddress(temp)
SendMessage item,TVM_GETITEMW,0,tvitem
For n=0 To BankSize(temp)/4-1
PokeInt temp,n*4,1
Next
SendMessage item,TVM_SETITEMW,0,tvitem
FreeBank temp
End Function
Structure TVITEM
mask.l
hItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
iSelectedImage.l
cChildren.l
lParam.l
EndStructure
InitCommonControls_()
ProcedureDLL.l CreateImageList()
ProcedureReturn ImageList_Create_(16,16,#ILC_COLOR16,2,4)
EndProcedure
ProcedureDLL ImageListAdd(hndImgList,hndimage)
ImageList_Add_(hndImgList,hndimage,0)
EndProcedure
ProcedureDLL SetTreeViewNodeIcon(treeviewnode)
hitem=PeekL(treeviewnode+28)
hwnd=PeekL(treeviewnode+24)
TVITEM.TVITEM
TVITEM\hItem=hitem
SendMessage_(hwnd,#TVM_GETITEM,0,TVITEM.TVITEM)
TVITEM\mask=#TVIF_IMAGE+#TVIF_SELECTEDIMAGE
TVITEM\iImage=1
TVITEM\iSelectedImage=1
SendMessage_(hwnd,#TVM_SETITEM,0,TVITEM.TVITEM)
EndProcedure
Const TV_FIRST = $1100
Const TVM_GETITEMRECT = (TV_FIRST + 4)
Const TVM_SETIMAGELIST = (TV_FIRST + 9)
Const TVM_HITTEST = (TV_FIRST + 17)
Const TVM_SORTCHILDRENCB = (TV_FIRST + 21)
Const TVM_GETITEMW = (TV_FIRST + 62)
Const TVM_SETITEMW = (TV_FIRST + 63)
Const TVM_INSERTITEMW = (TV_FIRST + 50)
Const TVM_GETITEM = TV_FIRST + 62
Const TVM_SETITEM = TV_FIRST + 13
Const TVM_GETNEXTITEM = TV_FIRST + 10
Const TVM_GETITEMSTATE = TV_FIRST + 39
Const TVIS_EXPANDED = $20
Const TVGN_CARET = $9
Const TVM_GETITEM32A =(TV_FIRST+12)
Const TVM_GETITEM32W =(TV_FIRST+62)
Const TVGN_CHILD =4
Const TVM_GETCOUNT =(TV_FIRST+5)
Const TVGN_NEXT =1
Const TVS_CHECKBOXES =$0100
Const GWL_STYLE = (-16)
Const TVM_SELECTITEM =(TV_FIRST+11)
Const TVM_SORTCHILDREN =(TV_FIRST+19)
Const TVSIL_NORMAL = 0
Const TVSIL_STATE = 2
win=CreateWindow("",0,0,400,300)
tree=CreateTreeView(0,0,200,200,win)
root=TreeViewRoot(tree)
node=AddTreeViewNode("test",root)
node2=AddTreeViewNode("test2",node)
dir$=CurrentDir()
icon0=pbLoadImage(2,dir+"0.bmp")
icon1=pbLoadImage(1,dir+"1.bmp")
;ChangeDir dir
ilist=createimagelist()
ImageListAdd(ilist,icon0)
ImageListAdd(ilist,icon1)
hwnd=QueryObject(tree,1)
SendMessage hwnd,TVM_SETIMAGELIST,TVSIL_NORMAL,ilist
SetTreeViewNodeIcon(node)
Repeat : Until WaitEvent()=$803
Function SetTreeViewNodeIcon1(treeviewnode,index)
item=PeekL(treeviewnode+28)
hwnd=PeekL(treeviewnode+24)
temp=CreateBank(40)
tvitem=BankAddress(temp)
SendMessage item,TVM_GETITEMW,0,tvitem
For n=0 To BankSize(temp)/4-1
PokeInt temp,n*4,1
Next
SendMessage item,TVM_SETITEMW,0,tvitem
FreeBank temp
End Function