Bonjour

Je voudrais savoir comment grouper les items d'une list-view comme le fait l'explorateur Windows sous XP. Jusqu'a present je sais appliquer les styles LVS_ICON, LVS_REPORT, LVS_SMALLICON et LVS_LIST.

J'ai parcouru l'MSDN et je suis tombe sur des CListCtrl::InsertGroup et CListCtrl::MoveItemToGroup sans exemple de code malheureusement.

j'ai l'impression que CListCtrl::MoveItemToGroup n'est pas implemente comme l'indique la doc en ligne de MSDN.

Avez-vous une idee? Connaissez-vous les API dont j'ai besoin pour manier ce Commom-Controls a la sauce de l'explorateur Windows Style XP?

Voici mon code d'exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
void CLVView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();
 
	m_SmallImageList.Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 1);
	m_LargeImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 1, 1);
 
	HICON hIcon = AfxGetApp()->LoadIcon(IDR_LVTYPE);
	m_SmallImageList.Add(hIcon);
	m_LargeImageList.Add(hIcon);
 
	CListCtrl& ThisListCtrl = GetListCtrl();
	ThisListCtrl.SetImageList(&m_SmallImageList, LVSIL_SMALL);
	ThisListCtrl.SetImageList(&m_LargeImageList, LVSIL_NORMAL);
 
	DWORD dwStyle = WS_VISIBLE | WS_CHILD | WS_BORDER;
	dwStyle |= LVS_ICON;
	ThisListCtrl.ModifyStyle(0, dwStyle);
 
 
	CRect rect;
	GetClientRect(&rect);
 
	LVGROUPMETRICS GroupMetrics;
	ZeroMemory(&GroupMetrics, sizeof(LVGROUPMETRICS));
	GroupMetrics.cbSize = sizeof(LVGROUPMETRICS);
	GroupMetrics.mask = LVGMF_BORDERSIZE;
	GroupMetrics.Left = rect.left;
	GroupMetrics.Right = rect.right;
	GroupMetrics.Top = rect.top;
	GroupMetrics.Bottom = (rect.bottom+rect.top)/2;
	ThisListCtrl.SetGroupMetrics(&GroupMetrics);
 
	LVGROUP grp;
	ZeroMemory(&grp, sizeof(LVGROUP));
	grp.cbSize = sizeof(LVGROUP);
	grp.mask = LVGF_ALIGN | LVGF_GROUPID | LVGF_HEADER | LVGF_STATE | LVGF_NONE;
	grp.state = LVGS_NORMAL;
	grp.stateMask = 0;
	grp.uAlign = LVGA_HEADER_LEFT;
 
	grp.pszHeader = L"Groupe 1";
	grp.cchHeader = lstrlenW(grp.pszHeader);
	grp.iGroupId = 0;
 
	LRESULT R = ThisListCtrl.InsertGroup(0, &grp);
 
	grp.pszHeader = L"Groupe 2";
	grp.cchHeader = lstrlenW(grp.pszHeader);
	grp.iGroupId = 1;
 
	R = ThisListCtrl.InsertGroup(1, &grp);
 
	LV_ITEM lvItem;
	lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; 
 
	lvItem.iItem = 0;
	lvItem.iSubItem = 0;
	lvItem.pszText = "item 1";  
	lvItem.cchTextMax = lstrlen(lvItem.pszText);
	lvItem.iImage = 0;	
	int index = ThisListCtrl.InsertItem(&lvItem);
 
	lvItem.iItem = 1;
	lvItem.iSubItem = 0;
	lvItem.pszText = "item 2";  
	lvItem.cchTextMax = lstrlen(lvItem.pszText);
	lvItem.iImage = 0;	
	index = ThisListCtrl.InsertItem(&lvItem);
 
	LRESULT res = ThisListCtrl.EnableGroupView(TRUE);
    if(res == 1)
		AfxMessageBox("group View was enabled");
	else
		AfxMessageBox("group View was not enabled");
 
	//ThisListCtrl.SetView(LV_VIEW_TILE);
	if(ThisListCtrl.IsGroupViewEnabled())
		AfxMessageBox("group View is enabled");
	else
		AfxMessageBox("group View is not enabled");
 
	if(ThisListCtrl.HasGroup(0))
		AfxMessageBox("has group 0");
 
	if(ThisListCtrl.HasGroup(1))
		AfxMessageBox("has group 1");
 
 
	LVGROUP grp2;
	ZeroMemory(&grp2, sizeof(LVGROUP));
	grp2.cbSize = sizeof(LVGROUP);
	grp2.mask = LVGF_ALIGN | LVGF_GROUPID | LVGF_HEADER | LVGF_STATE | LVGF_NONE;
 
	ThisListCtrl.GetGroupInfo(0, &grp2);
	AfxMessageBox(CString(grp2.pszHeader));
 
	ZeroMemory(&grp2, sizeof(LVGROUP));
	grp2.cbSize = sizeof(LVGROUP);
	grp2.mask = LVGF_ALIGN | LVGF_GROUPID | LVGF_HEADER | LVGF_STATE | LVGF_NONE;
 
	ThisListCtrl.GetGroupInfo(1, &grp2);
	AfxMessageBox(CString(grp2.pszHeader));
 
	ThisListCtrl.MoveItemToGroup(0, 0);
	ThisListCtrl.MoveItemToGroup(1, 1);
 
}
Excusez-moi le manque d'accents a cause de mon clavier QWERTY.