Comment grouper les items d'une listview comme sous Windows Explorer?
	
	
		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:
	
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.