Using listview groups?

Windows specific forum
Justin
Addict
Addict
Posts: 948
Joined: Sat Apr 26, 2003 2:49 pm

Using listview groups?

Post by Justin »

anyone knows how they work?, at msdn in the LVM_INSERTGROUP says you can't insert a group in a empty listview. how are you suposed to work?, insert item, insert group, insert item in group? sounds like crap, any hint?

http://msdn.microsoft.com/library/en-us ... tgroup.asp
Sparkie
PureBatMan Forever
PureBatMan Forever
Posts: 2307
Joined: Tue Feb 10, 2004 3:07 am
Location: Ohio, USA

Post by Sparkie »

One year late, but here's some code to get you started. This is my first attempt at ListIconGadget Groups, so there's plenty room for improvement. ;)

WinXP with Skins enabled is Required.

Code: Select all

; *****************************************************************
; ************ Requires WinXP with Skins enabled ******************
; *****************************************************************
#LVM_FIRST = $1000
#LVM_SETGROUPMETRICS = #LVM_FIRST + 155
#LVM_ENABLEGROUPVIEW = #LVM_FIRST + 157
#LVM_INSERTGROUP = #LVM_FIRST + 145
#LVGF_HEADER = 1
#LVGF_ALIGN = 8
#LVGF_STATE = 4
#LVGF_GROUPID = $10
#LVGMF_BORDERCOLOR = 2
#LVGMF_BORDERSIZE = 1
#LVGMF_NONE = 0
#LVGMF_TEXTCOLOR = 4
#LVGA_HEADER_CENTER = 2
#LVGA_HEADER_LEFT = 1
#LVGA_HEADER_RIGHT = 4
#LVIF_GROUPID = $100
#LVIF_IMAGE = 2
#LVIF_TEXT = 1

; --> Structure used tp define Group
Structure myLVGROUP
  cbSize.l
  mask.l
  pszHeader.l
  cchHeader.l
  pszFooter.l
  cchFooter.l
  iGroupId.l
  stateMask.l
  state.l
  uAlign.l
EndStructure
lvGroup.myLVGROUP

; --> Structure used for placing item into it's Group
Structure myLVITEM
  mask.l 
  iItem.l 
  iSubItem.l 
  state.l 
  stateMask.l 
  pszText.l 
  cchTextMax.l 
  iImage.l 
  lParam.l
  iIndent.l
  iGroupId.l
  cColumns.l
  puColumns.l
EndStructure
lvitemgroup.myLVITEM

; --> Structure used for changing Group colors
Structure myLVGROUPMETRICS
 cbSize.l 
 mask.l 
 left.l 
 top.l 
 right.l 
 bottom.l 
 crLeft.l 
 crTop.l 
 crRight.l
 crBottom.l
 crHeader.l
 crFooter.l
EndStructure
lvGM.myLVGROUPMETRICS

; --> Create 3 Group images
redImg = CreateImage(0, 16, 16)
StartDrawing(ImageOutput())
Box(0, 0, 16, 16, RGB(255, 0, 0))
StopDrawing()

greenImg = CreateImage(1, 16, 16)
StartDrawing(ImageOutput())
Box(0, 0, 16, 16, RGB(0, 255, 0))
StopDrawing()

blueImg = CreateImage(2, 16, 16)
StartDrawing(ImageOutput())
Box(0, 0, 16, 16, RGB(0, 0, 255))
StopDrawing()

If OpenWindow(0, 0, 0, 500, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "ListIconGadget Groups") And CreateGadgetList(WindowID(0)) 
  ListIconGadget(0, 10, 10, 480, 280, "", 200)
  ChangeListIconGadgetDisplay(0, 1)
  For i = 0 To 3
    item$ = "Item " + Str(i)
    AddGadgetItem(0 , i, item$, redImg)
  Next  i
  For i = 4 To 7
    item$ = "Item " + Str(i)
    AddGadgetItem(0 , i, item$, greenImg)
  Next  i
  For i = 8 To 11
    item$ = "Item " + Str(i)
    AddGadgetItem(0 , i, item$, blueImg)
  Next  i
  ; --> Enable Group view
  SendMessage_(GadgetID(0), #LVM_ENABLEGROUPVIEW , #True, 0)
  lvGroup\cbSize = SizeOf(myLVGROUP)
  lvGroup\mask = #LVGF_HEADER | #LVGF_GROUPID | #LVGF_ALIGN 
  ; --> Create Group 0
  group$ = "Red Group"
  sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
  GroupName$ = Space(sLen*2)
  MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
  lvGroup\pszHeader = @GroupName$
  lvGroup\cchHeader = sLen*2
  lvGroup\iGroupId = 0
  lvGroup\uAlign = #LVGA_HEADER_LEFT
  SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 0, lvGroup)
  ; --> Create Group 1
  group$ = "Green Group"
  sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
  GroupName$ = Space(sLen*2)
  MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
  lvGroup\pszHeader = @GroupName$
  lvGroup\cchHeader = sLen*2
  lvGroup\iGroupId = 1
  lvGroup\uAlign = #LVGA_HEADER_LEFT
  SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 1, lvGroup)
  ; --> Create Group 2
  group$ = "Blue Group"
  sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
  GroupName$ = Space(sLen*2)
  MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
  lvGroup\pszHeader = @GroupName$
  lvGroup\cchHeader = sLen*2
  lvGroup\iGroupId = 2
  lvGroup\uAlign = #LVGA_HEADER_LEFT
  SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 2, lvGroup)
  ; --> Change Group header text color
  ; --> AFAIK, Group Metrics applies to all Groups
  lvGM\cbSize = SizeOf(myLVGROUPMETRICS)
  lvGM\mask = #LVGMF_TEXTCOLOR
  lvGM\crHeader = RGB(100, 50, 100)
  SendMessage_(GadgetID(0), #LVM_SETGROUPMETRICS, 0, lvGM)
  ; --> Place items 0 - 3 into Group 0
  For r = 0 To 3
    lvitemgroup\mask = #LVIF_GROUPID
    lvitemgroup\iItem = r
    lvitemgroup\iGroupId = 0
    SendMessage_(GadgetID(0), #LVM_SETITEM, r, lvitemgroup)
  Next r
  ; --> Place items 4 - 7 into Group 1
  For g = 4 To 7
    lvitemgroup\mask = #LVIF_GROUPID
    lvitemgroup\iItem = g
    lvitemgroup\iGroupId = 1
    SendMessage_(GadgetID(0), #LVM_SETITEM, g, lvitemgroup)
  Next g
  ; --> Place items 8 - 11 into Group 2
  For b = 8 To 11
    lvitemgroup\mask = #LVIF_GROUPID
    lvitemgroup\iItem = b
    lvitemgroup\iGroupId = 2
    SendMessage_(GadgetID(0), #LVM_SETITEM, b, lvitemgroup)
  Next b
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf 
What goes around comes around.

PB 5.21 LTS (x86) - Windows 8.1
Fred
Administrator
Administrator
Posts: 18162
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Post by Fred »

Looks pretty :)
Post Reply