For windows. I'm not sure how much of this header you'll need, don't have a lot of time to filter it out for you, but the two functions below should do what you want.
Extern "win32"
Function SendMessage:Int(hWnd:Int,MSG:Int,wParam:Int,lParam:Int) = "SendMessageA@16"
Function SetWindowLong:Int(hWnd:Int,nIndex:Int,lNewLong:Long)= "SetWindowLongA@12"
Function GetModuleHandleA:Int(lMod:Long)'Function CreateWindowExA(dwExStyle:Double,lpClassName:Byte Ptr,lpWindowName:Byte Ptr,dwStyle:Double,x:Int,y:Int,nWidth:Int,nHeight:Int,hWndParent:Int,HMENU:Int,HINSTANCE:Int,LPVOID:Int)
Function GetWindowLong:Int(hWnd:Int,nIndex:Int)= "GetWindowLongA@8"
Function MoveWindow(hWnd:Int,X:Int,Y:Int,nWidth:Int,nHeight:Int,bRepaint:Byte)
Function SetWindowPos:Int( hwnd:Int, hwndafter:Int, x:Int,y:Int, cx:Int,cy:Int, flags:Int)
Function RedrawWindow:Int( hwnd:Int, rect:Byte Ptr, region:Int, flags:Int)
End Extern
Const SWP_DRAWFRAME:Int = 32
Const SWP_FRAMECHANGED:Int = 32
Const SWP_HIDEWINDOW:Int = 128
Const SWP_NOACTIVATE:Int = 16
Const SWP_NOCOPYBITS:Int = 256
Const SWP_NOMOVE:Int = 2
Const SWP_NOSIZE:Int = 1
Const SWP_NOREDRAW:Int = 8
Const SWP_NOZORDER:Int = 4
Const SWP_SHOWWINDOW:Int = 64
Const SWP_NOOWNERZORDER:Int = 512
Const SWP_NOREPOSITION:Int = 512
Const SWP_NOSENDCHANGING:Int = 1024
Const SWP_DEFERERASE:Int = 8192
Const SWP_ASYNCWINDOWPOS:Int = 16384
Const RDW_ERASE:Int = 4
Const RDW_FRAME:Int = 1024
Const RDW_INTERNALPAINT:Int = 2
Const RDW_INVALIDATE:Int = 1
Const RDW_NOERASE:Int = 32
Const RDW_NOFRAME:Int = 2048
Const RDW_NOINTERNALPAINT:Int = 16
Const RDW_VALIDATE:Int = 8
Const RDW_ERASENOW:Int = 512
Const RDW_UPDATENOW:Int = 256
Const RDW_ALLCHILDREN:Int = 128
Const RDW_NOCHILDREN:Int = 64
Const WS_BORDER:Int = $800000 ' thin border
Const WS_EX_CLIENTEDGE:Int = 512 ' 3d border
' Tree view
Const TVS_HASBUTTONS:Int = $0001
Const TVS_HASLINES:Int = $0002
Const TVS_LINESATROOT:Int = $0004
Const TVS_EDITLABELS:Int = $0008
Const TVS_DISABLEDRAGDROP:Int = $0010
Const TVS_SHOWSELALWAYS:Int = $0020
Const TVS_RTLREADING:Int = $0040
Const TVS_NOTOOLTIPS:Int = $0080
Const TVS_CHECKBOXES:Int = $0100
Const TVS_TRACKSELECT:Int = $0200
Const TVS_SINGLEEXPAND:Int = $0400
Const TVS_INFOTIP:Int = $0800
Const TVS_FULLROWSELECT:Int = $1000
Const TVS_NOSCROLL:Int = $2000
Const TVS_NONEVENHEIGHT:Int = $4000
Const TVS_SHAREDIMAGELISTS:Int = $0000
Const TVS_PRIVATEIMAGELISTS:Int = $0400
Const TV_FIRST:Int = $1100
Const TVM_GETITEMRECT:Int = (TV_FIRST + 4)
Const TVM_SETIMAGELIST:Int = (TV_FIRST + 9)
Const TVM_HITTEST:Int = (TV_FIRST + 17)
Const TVM_SORTCHILDRENCB:Int = (TV_FIRST + 21)
Const TVM_GETITEMW:Int = (TV_FIRST + 62)
Const TVM_SETITEMW:Int = (TV_FIRST + 63)
Const TVM_INSERTITEMW:Int = (TV_FIRST + 50)
Const TVM_GETITEM:Int = TV_FIRST + 62
Const TVM_SETITEM:Int = TV_FIRST + 13
Const TVM_GETNEXTITEM:Int = TV_FIRST + 10
Const TVM_GETITEMSTATE:Int = TV_FIRST + 39
Const TVM_GETITEM32A:Int = (TV_FIRST+12)
Const TVM_GETITEM32W:Int = (TV_FIRST+62)
Const TVM_GETCOUNT:Int = (TV_FIRST+5)
Const TVM_SELECTITEM:Int = (TV_FIRST+11)
Const TVM_SORTCHILDREN:Int = (TV_FIRST+19)
Const TVIS_EXPANDED:Int = $20
Const TVSIL_NORMAL:Int = 0
Const TVSIL_STATE:Int = 2
Const TVGN_NEXT:Int = 1
Const TVGN_CHILD:Int = 4
Const TVGN_CARET:Int = $9
Const GWL_STYLE:Int = -$10
Type TVITEM
Field mask:Int
Field hItem:Int 'HTREEITEM
Field state:Int
Field stateMask:Int
Field pszText:Byte Ptr 'LPTSTR
Field cchTextMax:Int
Field iImage:Int
Field iSelectedImage:Int
Field cChildren:Int
Field lParam:Int 'LPARAM
EndType
' List box
Const LBS_NOTIFY:Int = $1
Const LBS_SORT:Int = $2
Const LBS_NOREDRAW:Int = $4
Const LBS_MULTIPLESEL:Int = $8
Const LBS_OWNERDRAWFIXED:Int = $10
Const LBS_OWNERDRAWVARIABLE:Int = $20
Const LBS_HASSTRINGS:Int = $40
Const LBS_USETABSTOPS:Int = $70
Const LBS_NOINTEGRALHEIGHT:Int = $100
Const LBS_MULTICOLUMN:Int = $200
Const LBS_WANTKEYBOARDINPUT:Int = $400
Const LBS_EXTENDEDSEL:Int = $800
Const LBS_DISABLENOSCROLL:Int = $100
Const LBS_NODATA:Int = $2000
Const LBS_NOSEL:Int = $4000
Const LBS_STANDARD:Int = $a00003
Const LVM_FIRST:Int = $1000
Const LVM_GETITEMA:Int = (LVM_FIRST+5)
Const LVM_SETITEMA:Int = (LVM_FIRST+6)
Const LVM_INSERTITEMA:Int = (LVM_FIRST+7)
Const LVM_DELETEITEM:Int = (LVM_FIRST+8)
Const LVM_DELETEALLITEMS:Int = (LVM_FIRST+9)
Const LVM_GETCALLBACKMASK:Int = (LVM_FIRST+10)
Const LVM_SETCALLBACKMASK:Int = (LVM_FIRST+11)
Const LVM_GETCOLUMNA:Int = (LVM_FIRST+25)
Const LVM_SETCOLUMNA:Int = (LVM_FIRST+26)
Const LVM_INSERTCOLUMNA:Int = (LVM_FIRST+27)
Const LVM_DELETECOLUMN:Int = (LVM_FIRST+28)
Const LVM_GETCOLUMNWIDTH:Int = (LVM_FIRST+29)
Const LVM_SETCOLUMNWIDTH:Int = (LVM_FIRST+30)
Const LVM_GETTEXTCOLOR:Int = (LVM_FIRST+35)
Const LVM_SETTEXTCOLOR:Int = (LVM_FIRST+36)
Const LVM_GETTEXTBKCOLOR:Int = (LVM_FIRST+37)
Const LVM_SETTEXTBKCOLOR:Int = (LVM_FIRST+38)
Const LVM_SORTITEMS:Int = (LVM_FIRST+48)
Const LVM_SETLISTBOXEXSTYLE:Int = (LVM_FIRST+54)
Const LVM_GETITEMW:Int = (LVM_FIRST+75)
Const LVM_SETITEMW:Int = (LVM_FIRST+76)
Const LVM_INSERTITEMW:Int = (LVM_FIRST+77)
Const LVM_GETCOLUMNW:Int = (LVM_FIRST+95)
Const LVM_SETCOLUMNW:Int = (LVM_FIRST+96)
Const LVM_INSERTCOLUMNW:Int = (LVM_FIRST+97)
Const LVCF_FMT:Int = $1
Const LVCF_WIDTH:Int = $2
Const LVCF_TEXT:Int = $4
Const LVCF_SUBITEM:Int = $8
Const LVCF_IMAGE:Int = $10
Const LVCF_ORDER:Int = $20
Const LVS_ALIGNTOP:Int = $0
Const LVS_ICON:Int = $0
Const LVS_REPORT:Int = $1
Const LVS_SMALLICON:Int = $2
Const LVS_LIST:Int = $3
Const LVS_TYPEMASK:Int = $3
Const LVS_SINGLESEL:Int = $4
Const LVS_SHOWSELALWAYS:Int = $8
Const LVS_SORTASCENDING:Int = $10
Const LVS_SORTDESCENDING:Int = $20
Const LVS_SHAREIMAGELISTS:Int = $40
Const LVS_NOLABELWRAP:Int = $80
Const LVS_AUTOARRANGE:Int = $100
Const LVS_EDITLABELS:Int = $200
Const LVS_OWNERDRAWFIXED:Int = $400
Const LVS_ALIGNLEFT:Int = $800
Const LVS_ALIGNMASK:Int = $C00
Const LVS_NOSCROLL:Int = $2000
Const LVS_NOCOLUMNHEADER:Int = $4000
Const LVS_NOSORTHEADER:Int = $8000
Const LVS_TYPESTYLEMASK:Int = $FC00
Const LVS_EX_GRIDLINES:Int = $1
Const LVS_EX_SUBITEMIMAGES:Int = $2
Const LVS_EX_CHECKBOXES:Int = $4
Const LVS_EX_TRACKSELECT:Int = $8
Const LVS_EX_HEADERDRAGDROP:Int = $10
Const LVS_EX_FULLROWSELECT:Int = $20
Const LVS_EX_ONECLICKACTIVATE:Int = $40
Const LVS_EX_TWOCLICKACTIVATE:Int = $80
Const LVS_EX_FLATSB:Int = $100
Const LVS_EX_REGIONAL:Int = $200
Const LVS_EX_INFOTIP:Int = $400
Const LVS_EX_UNDERLINEHOT:Int = $800
Const LVS_EX_UNDERLINECOLD:Int = $1000
Const LVS_EX_MULTIWORKAREAS:Int = $2000
Const LVS_EX_LABELTIP:Int = $4000
Const LVS_EX_BORDERSELECT:Int = $8000
Const LVS_EX_DOUBLEBUFFER:Int = $10000
Const LVS_EX_HIDELABELS:Int = $20000
Const LVS_EX_SINGLEROW:Int = $40000
Const LVS_EX_SNAPTOGRID:Int = $80000
Const LVS_EX_SIMPLESELECT:Int = $100000
Const LVIF_TEXT:Int = $1
Const LVIF_IMAGE:Int = $2
Const LVIF_PARAM:Int = $4
Const LVIF_STATE:Int = $8
Const LVIF_INDENT:Int = $10
Const LVIF_GROUPID:Int = $100
Const LVIF_COLUMNS:Int = $200
Const LVIF_NORECOMPUTE:Int = $800
Const LVIF_DI_SETITEM:Int = $1000
Type LVCOLUMN
Field mask:Int
Field fmt:Int
Field cx:Int
Field pszText:Byte Ptr
Field cchTextMax:Int
Field iSubItem:Int
EndType
Type LVITEM
Field mask:Int
Field iItem:Int
Field iSubItem:Int
Field iState:Int
Field stateMask:Int
Field pszText:Byte Ptr
Field cchTextMax:Int
Field iImage:Int
Field lParam:Int
Field iIndent:Int
Field iGroupId:Int
Field cColumns:Int
Field puColumns:Int
EndType
The functions:
Function TreeViewGetNodeImage:Int(TreeView:TGadget, Node:TGadget)
Local Item:TVITEM = New TVITEM, pItem:Byte Ptr = Item
Local hwndView:Int, hwndNode:Int
hwndView = QueryGadget(TreeView, QUERY_HWND)
' hwndNode = QueryGadget(Node, 1)
hwndNode = SendMessage(hwndView, TVM_GETNEXTITEM, TVGN_CARET, 0)
Print "hwndView = " + String(hwndView) + " hwndNode = " + String(hwndNode)
Item.hItem = hwndNode
Item.Mask = TVIF_IMAGE
SendMessage(hwndView, TVM_GETITEM, 0, Int(pItem))
Return Item.iImage
EndFunction
Function TreeViewSetNodeImage:Int(TreeView:TGadget, Node:TGadget, Image:Int)
Local Item:TVITEM = New TVITEM, pItem:Byte Ptr = Item
Local hwndView:Int, hwndNode:Int
hwndView = QueryGadget(TreeView, QUERY_HWND)
' hwndNode = QueryGadget(Node, 1)
hwndNode = SendMessage(hwndView, TVM_GETNEXTITEM, TVGN_CARET, 0)
Print "hwndView = " + String(hwndView) + " hwndNode = " + String(hwndNode)
Item.hItem = hwndNode
Item.Mask = TVIF_IMAGE
Item.iImage = Image
SendMessage(hwndView, TVM_SETITEM, 0, Int(pItem))
Print "Set icon to " + Item.iImage
Return Item.iImage
EndFunction
I might of gotten these somewhere on this forum - might not have. I don't have a note of it but it is in a pile of Win32 API code that I have gotten from various places and written myself. Apologies if this is verbatim copied without attribution!
You'll want to remove the Print lines from these in production code.