IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Comment grouper les items d'une listview comme sous Windows Explorer?


Sujet :

Visual C++

  1. #1
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut 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 : 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.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Déjà, est-ce que tu as le "style XP" activé dans ton programme ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Oui le style XP est activé, j'en ai même créer le fichier manifeste qui cible bien la version 6.0 de ComCtl32.dll

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Dans ce cas, je ne vois pas trop...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Grouper les items d'une combobox
    Par chris81 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 30/12/2008, 12h12
  2. grouper les items d'une listbox.
    Par maa dans le forum Silverlight
    Réponses: 1
    Dernier message: 27/03/2008, 18h33
  3. Réponses: 0
    Dernier message: 28/08/2007, 13h21
  4. Réponses: 1
    Dernier message: 06/05/2007, 21h31
  5. Réponses: 2
    Dernier message: 31/07/2006, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo