'Listview with icons
CONST LVSIL_SMALL =  1   
CONST LVM_FIRST =  0x1000
CONST LVM_GETITEMA = (LVM_FIRST + 5)   
CONST LVM_SETITEMA = (LVM_FIRST + 6)   
CONST LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54)
CONST LVM_SETIMAGELIST =  (LVM_FIRST + 3)   
CONST LVS_EX_FULLROWSELECT = &H20
CONST LVS_EX_GRIDLINES = &H1
CONST LVS_EX_SUBITEMIMAGES = &H2
CONST ILC_MASK = &H1
CONST ILC_COLOR4 = &H4
CONST ILC_COLOR24 = &H18
' List View Image   
CONST LVIF_IMAGE = 0x2   
CONST LVIF_STATE = 0x8   
CONST LVIF_TEXT = 0x1  
'DECLARE "comctl32.dll",ImageList_Create(cx:INT, cy:INT, flags:UINT, cInitial:INT, cGrow:INT ),INT   
DECLARE "comctl32.dll",ImageList_AddIcon(himl:INT, hicon:INT),INT   
'DECLARE "comctl32.dll",ImageList_ReplaceIcon(himl:INT, i:INT, hicon:INT),INT
'DECLARE "comctl32.dll",ImageList_Destroy(himl:INT),INT
TYPE LV_ITEM   
    DEF mask:UINT   
    DEF iItem:INT   
    DEF iSubItem:INT   
    DEF state:UINT   
    DEF stateMask:UINT   
    DEF pszText:pointer 
    DEF cchTextMax:INT   
    DEF iImage:INT          
    DEF lParam:INT   
ENDTYPE   
DIALOG D1 
CREATEDIALOG d1,0,0,200,80,0x80CA0080,0,"Caption",&handler 
CONTROL d1,@LISTVIEW,"",0,0,200,80,0x50000001,1 
showdialog d1 
controlcmd d1, 1, @lvinsertcolumn, 0, "1" 
controlcmd d1, 1, @lvinsertcolumn, 1, "2" 
controlcmd d1, 1, @lvinsertitem, 0, "a" 
controlcmd d1, 1, @lvsettext, 0, 1, "b" 
controlcmd d1, 1, @lvinsertitem, 1, "c" 
controlcmd d1, 1, @lvsettext, 1, 1, "d" 
controlcmd d1, 1, @lvsetcolwidth, 0, 100 
controlcmd d1, 1, @lvsetcolwidth, 1, 100 
UINT hiItem[2] 
hiItem[0] = LOADIMAGE (GETSTARTPATH + "4.ico", @IMGICON) 
hiItem[1] = LOADIMAGE (GETSTARTPATH + "cclm.ico",@IMGICON) 
'messagebox 0, getstartpath, str$(hiItem[0])+str$(hiItem[1])
UINT himl 
himl = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR4, 2, 0) 
SendMessage d1, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_SUBITEMIMAGES, 1 
sendmessage d1, LVM_SETIMAGELIST, LVSIL_SMALL, himl, 1 
ImageList_ReplaceIcon(himl, -1, hiItem[0]) 
ImageList_ReplaceIcon(himl, -1, hiItem[1]) 
setico(0,0, 0) 
setico(0,1, 1) 
setico(1,0, 0) 
setico(1,1, 1) 
  
waituntil d1.hwnd=0 
END
sub setico(item:int, subitem:int, image:int) 
   LV_ITEM lvi 
   lvi.mask    = LVIF_IMAGE 
   lvi.iItem    = item 
   lvi.iSubItem = subitem 
   lvi.iImage   = image 
   sendmessage d1, LVM_SETITEMA, 0, &lvi, 1
   return 
endsub 
sub handler 
   select @message 
      case @idinitdialog
         centerwindow d1 
      case @idclosewindow 
         ImageList_Destroy(himl) 
         closedialog d1 
   endselect 
   return 
endsub
