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

MFC Discussion :

Trier les éléments d'une CListCtrl


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 24
    Par défaut Trier les éléments d'une CListCtrl
    Bonjour à tous,
    J'ai insérer une listctrl dans ma boite de dialogue, et je veux trier les éléments de cette liste.
    J'ai pris l'exemple sur la msdn mais ça ne marche pas!!
    voici le code que j'ai mis:
    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
    static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
           // lParamSort contains a pointer to the list view control.
           CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
           CString    strItem1 = pListCtrl->GetItemText(lParam1, 0);
           CString    strItem2 = pListCtrl->GetItemText(lParam2, 0);
     
           LVITEM lvi1;
           ZeroMemory(&lvi1, sizeof(LVITEM));
           lvi1.iItem = lParam1; 
           return strcmp(strItem2, strItem1);
    }
     
    void CMyListCtrl::snip_CListCtrl_SortItems()
    {
       // Sort the list view items using my callback procedure.
       SortItems(MyCompareProc, (LPARAM) this);
    }
    Quand je fais appel à la fonction snip_CListCtrl_SortItems(), le programme n'entre pas dans la fonction de callback: MyCompareProc!!
    Quelqu'un pourrait m'aider sur ce point svp?
    Merci,
    Hanane

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Quel est le tri que tu veux effectuer?
    Je demande ça car si c'est la tri alphabétique classique, c'est automatique.
    Sinon, je te conseille d'utiliser CListCtrl::GetItemText() et d'implémenter toi-même ta fonction de tri.
    Il y a aussi CListCtrl::SortGroup(), mais je ne connais pas cette méthode.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 24
    Par défaut
    Re,
    Oui c'est ce que j'ai fait. j'ai implementé ma fonction de tri en callback, et j'appelle SortItems en lui donnant la fonction de tri comme paramètre.
    Mais malgré ça le programme n'entre pas dans la fonction de tri.
    Hanane

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Essaie d'invalider ta CListCtrl (myList.Invalidate(); )

  5. #5
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 24
    Par défaut
    Non j'ai essayé de faire ce que t'as dit mais ca ne marche pas!!
    Hanane

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    bon ben je ne sais pas, désolé, je n'ai jamais utilisé de CListCtrl.
    Sinon, ce que tu peux faire, c'est:
    1/ tu récupère tous les éléments de ta ListCtrl dans une structure à toi (une CStringList par exemple)
    2/ tu supprime tous les éléments de ta listctrl
    3/ tu trie "à la main" ta structure
    4/ tu re-rempli ta listCtrl dans l'ordre

    hope it helps.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Par défaut
    Bonjour,

    Dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    Les paramètre lParam1 et lParam2 valent les valeurs définies sur les éléments de la liste grâce à la méthode SetItemData(...)

    As-tu après un InsertItem(...) fait appel à SetItemData(...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // m_ListCtrl est la variable mappée sur le contrôle liste
    // ici ajout de 5 éléments
    ...
    int iPos = 0;
    int iItem = 0;
    static char *Txt[] = {"Jour","Nuit","Avion",Zèbre","Garage"};
    while(iPos < 5)
    {
       iItem = m_ListCtrl.InsertItem(iPos,Txt[iPos]);
       // Initialisation des autres colonnes
       m_ListCtrl.SetItemData(iItem,(DWORD)iItem);
       iPos++;
    }
    Le paramètre lParamSort vaut le paramètre passé à la méthode SortItems(MyCompareProc,this)

  8. #8
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 24
    Par défaut
    Bonjour,
    En fait, je n'ai pas de setItemDate, donc lparam1 et lparam2 représentent les indices des éléments.
    Mais le problème je crois n'est pas ici, puisqu'il n'entre même pas dans la fonction de tri.
    Est ce que le définition et l'appel de ma fonction de tri sont bons?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 
    SortItems(MyCompareProc, (LPARAM) this);
    Hanane

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Par défaut
    A première vue, cela semble correct.
    Je pense qu'il faut quand même définir une valeur à chaque élément grâce à SetItemData(...) mais le fait que tu ne passes pas dans MyCompareProc résulte d'un autre problème

    Je suppose que quelque part dans tes codes, tu fais bien appel à ta méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // CMyListCtrl m_ListCtrl; // Déclaré quelque part
    ...
    m_ListCtrl.snip_CListCtrl_SortItems();

    J'ai déjà implémenté une CMyListCtrl spécifique à un projet
    J'ai déclaré dans le fichier MyListCtrl.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class CMyListCtrl : public CListCtrl
    {
    ...
    static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
     
    public:
    void snip_CListCtrl_SortItems();
    ...
    }
    J'ai implémenté dans le fichier MyListCtrl.cpp
    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
     
    int CMyListCtrl::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 
    { 
           // lParamSort contains a pointer to the list view control. 
           CMyListCtrl* pListCtrl = (CMyListCtrl*) lParamSort; 
           CString    strItem1 = pListCtrl->GetItemText(lParam1, 0); 
           CString    strItem2 = pListCtrl->GetItemText(lParam2, 0); 
     
           LVITEM lvi1; 
           ZeroMemory(&lvi1, sizeof(LVITEM)); 
           lvi1.iItem = lParam1; 
           return strcmp(strItem2, strItem1); 
    } 
     
    void CMyListCtrl::snip_CListCtrl_SortItems() 
    { 
       // Sort the list view items using my callback procedure. 
       SortItems(MyCompareProc, (LPARAM) this); 
    }
    Au niveau d'une boîte de dialogue
    Fichier MaDlg.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "MyListCtrl.h"
    class MaDlg : public CDialog
    {
       ...
       CMyListCtrl   m_ListCtrl;
       ...
    }
    Fichier MaDlg.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void MaDlg::OnInitDialog()
    {
     ...
     // Garnir la CMyListCtrl
     ...
     // Trier la liste
     m_ListCtrl.snip_CListCtrl_SortItems();
    }

  10. #10
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 24
    Par défaut
    Oui c'est exactement ce que j'ai fait aussi, mais ca ne marche pas.
    J'ai ajouté le setItemData mais ca n'a rien changé!!
    Hanane

  11. #11
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    question bete : SortItems te retourne quoi ??

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Par défaut
    As-tu pensé à mapper ton contrôle ListCtrl de ta dialog avec une variable de type CMyListCtrl grâce à l'outils ClassWizard ?

  13. #13
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 24
    Par défaut
    Normalement SortItems retourn un bool Nonzero si le tri c bien fait sinon 0;
    dans mon cas ca retourne un bool different de 0.

    Pour
    As-tu pensé à mapper ton contrôle ListCtrl de ta dialog avec une variable de type CMyListCtrl grâce à l'outils ClassWizard ?
    Si j'ai bien compris, tu voulais dire avec la classWizard donner à ma liste une variable de type CMyListCtrl. Normalement c'est ce que j'ai fait.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Par défaut
    Je pense que tu passes dans la fonction MyCompareProc
    Je viens de faire un programme utilisant CMyListCtrl, et je constate que la méthode de tri donne des résultats incohérents mais je passe dans MyCompareProc.

    Je dois également mettre une valeur à l'élément grâce à SetItemData(...)

    Le problème provient probablement dans la procédure de tri de Windows car quand je TRACE MyCompareProc, j'ai par moment un lParam1 = 0 vaut "Texte1" et à un autre moment le même lParam1 = 0 vaut "Texte2"

    Donc j'ai adapté CMyListCtrl en ajoutant un CStringArray et j'ai un bon résultat

    Fichier MyListCtrl.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class CMyListCtrl : public CListCtrl
    {
    ...
    protected:
    	CStringArray Array; // Mémoire secondaire
     
    	static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
     
    public:
    	void snip_CListCtrl_SortItems();
    	int InsertItem(int iItem,LPCTSTR lpszItem);
    ...
    };
    J'ai écrasé la méthode InsertItem par une version personelle

    Fichier MyListCtrl.cpp
    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
     
    int CMyListCtrl::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 
    { 
           // lParamSort contains a pointer to the list view control. 
           CMyListCtrl* pListCtrl = (CMyListCtrl*) lParamSort; 
         int i1 = lParam1;
         int i2 = lParam2;
     
       CString strItem1 = pListCtrl->Array[i1];
       CString strItem2 = pListCtrl->Array[i2];
     
       TRACE("lParam1[%d] ... [%d][%s]\n",lParam1,i1,strItem1);
       TRACE("lParam2[%d] ... [%d][%s]\n",lParam2,i2,strItem2);
     
          return strcmp(strItem2, strItem1);
    } 
     
    void CMyListCtrl::snip_CListCtrl_SortItems() 
    { 
       // Sort the list view items using my callback procedure.
       SortItems(MyCompareProc, (LPARAM) this); 
    }
     
     
    int CMyListCtrl::InsertItem(int iItem,LPCTSTR lpszItem)
    {
    	Array.Add(lpszItem); // Ajout du texte dans la mémoire secondaire
    	return CListCtrl::InsertItem(iItem,lpszItem); // Insertion de l'élément dans la CMyListCtrl
    }
    Par exemple dans
    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
     
    void MaDlg::OnInitDialog()
    {
    ...
        int iItem;
     
       m_ListCtrl.InsertColumn(0,"Nom",LVCFMT_LEFT,70);
     
       iItem = m_ListCtrl.InsertItem(0,"Le Seigneur des Anneaux");
       m_ListCtrl.SetItemData(iItem,iItem);
     
       iItem = m_ListCtrl.InsertItem(1,"Boomerang");
       m_ListCtrl.SetItemData(iItem,iItem);
     
       iItem = m_ListCtrl.InsertItem(2,"Cyrano de Bergerac");
       m_ListCtrl.SetItemData(iItem,iItem);
     
       iItem = m_ListCtrl.InsertItem(3,"Les Visiteurs");
       m_ListCtrl.SetItemData(iItem,iItem);
     
       iItem = m_ListCtrl.InsertItem(4,"Alien");
       m_ListCtrl.SetItemData(iItem,iItem);
     
       m_ListCtrl.snip_CListCtrl_SortItems();
    ...
    }
    Donc si je comprends le fonctionnement du tri, il ne faut pas trier directement depuis les éléments de la liste mais depuis une mémoire secondaire (ici le CStringArray) qui n'est jamais triée

  15. #15
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 24
    Par défaut
    Oui j'ai bien compris ce que tu voulais dire, mais je crois que je suis sur que l'appli n'entre pas dans la fonction de tri car j'ai mis justement pour vérifier un messageBox au début de la fonction et justement ça ne s'affiche pas.
    Hanane

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    Bonjour a tous.

    Je remonte le sujet car j'ai essayé vaux differents methode et j'ai le meme resultat a chaque fois:

    En fait j'ai toujours LPARAM lParam1, LPARAM lParam2 ui sont égaux tous les deux a 1.

    il ne le change donc jamais rien...

    je vous met mon code pour la fonction ci dessus :


    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
    void CBiblioBDDlg::OnColumnclickListBd(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    	long m_type_tri = (LPARAM) pNMListView->iSubItem;
    	((CListCtrl *)GetDlgItem(IDC_LIST_BD))->SortItems((PFNLVCOMPARE)MyCompareProc,(LPARAM)((CListCtrl *)GetDlgItem(IDC_LIST_BD)));
    	*pResult = 0;
    }
     
     
    int CBiblioBDDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 
    { 
    	CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
     
       CString    strItem1 = pListCtrl->GetItemText(lParam1, 0);
       CString    strItem2 = pListCtrl->GetItemText(lParam2, 0);
     
       return stricmp(strItem1, strItem2);
     
    }
    J'ai aussi essyé la methode de MYClistCtrl

    merci d'avance

  17. #17
    Membre très actif
    Profil pro
    Développeur indépendant
    Inscrit en
    Août 2004
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2004
    Messages : 374
    Par défaut tri
    en fait, c'est la procédure du clistctrl qui t'envoie sur la procédure de tri les deux items à trier.
    c'est donc à toi de determiner
    1) la nature des items et donc la procédure de tri.
    2) à lui renvoyer -1,0 ou 1, selon la relation entre les deux items.
    un exemple qui marche trés bien..
    http://www.codeproject.com/listctrl/...select=1468514
    un excellent, que j'utilise tout le temps..

    je te mets à titre d'exemple la routine de tri callback appellée par le composant lors d'une demande de tri.
    tu remarqueras que je l'ai un peu customisé pour supporter des entrées de comparaisons assez diverses..
    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
    int CALLBACK CSortListCtrl::CompareFunction( LPARAM lParam1, LPARAM lParam2, LPARAM lParamData )
    {
    	CSortListCtrl* pListCtrl = reinterpret_cast<CSortListCtrl*>( lParamData );
    	ASSERT( pListCtrl->IsKindOf( RUNTIME_CLASS( CListCtrl ) ) );
     
    	ItemData* pid1 = reinterpret_cast<ItemData*>( lParam1 );
    	ItemData* pid2 = reinterpret_cast<ItemData*>( lParam2 );
     
    	ASSERT( pid1 );
    	ASSERT( pid2 );
     
    	LPCTSTR pszText1 = pid1->arrpsz[ pListCtrl->m_iSortColumn ];
    	LPCTSTR pszText2 = pid2->arrpsz[ pListCtrl->m_iSortColumn ];
     
    	CString deb1;
    	CString deb2;
    	deb1 = pid1->arrpsz[ 0];
    	deb2 = pid2->arrpsz[ 0];
    	if (pListCtrl->listesomme)
    	{
    		if (deb1=="")
    			return -1;
    		if (deb2=="")
    			return -1;
    	}
     
    	ASSERT_VALID_STRING( pszText1 );
    	ASSERT_VALID_STRING( pszText2 );
     
    	if( IsNumber( pszText1 ) )
    		return pListCtrl->m_bSortAscending ? NumberCompare( pszText1, pszText2 ) : NumberCompare( pszText2, pszText1 );
    	else if( IsDate( pszText1 ) )
    		return pListCtrl->m_bSortAscending ? DateCompare( pszText1, pszText2 ) : DateCompare( pszText2, pszText1 );
    	else if (IsFloat(pszText1))
    		return pListCtrl->m_bSortAscending ? FloatCompare( pszText1, pszText2 ) : FloatCompare( pszText2, pszText1 );
    	else
    		// text.
    		return pListCtrl->m_bSortAscending ? lstrcmp( pszText1, pszText2 ) : lstrcmp( pszText2, pszText1 );
    }
    à noter que on arrive à cette fonction seulement si on a lancé au prealable
    cette ligne de code qui appelle la procédure de tri intégrée..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VERIFY( SortItems( CompareFunction, reinterpret_cast<DWORD>( this ) ) );
    comment y arriver.??
    intercepter le click sur le bandeau du controleur..
    void CSortListCtrl::OnColumnClick( NMHDR* pNMHDR, LRESULT* pResult )
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    const int iColumn = pNMListView->iSubItem;

    // if it's a second click on the same column then reverse the sort order,
    // otherwise sort the new column in ascending order.
    Sort( iColumn, iColumn == m_iSortColumn ? !m_bSortAscending : TRUE );

    *pResult = 0;
    }


    void CSortListCtrl::Sort( int iColumn, BOOL bAscending )
    {
    m_iSortColumn = iColumn;
    m_bSortAscending = bAscending;

    // show the appropriate arrow in the header control.
    m_ctlHeader.SetSortArrow( m_iSortColumn, m_bSortAscending );

    VERIFY( SortItems( CompareFunction, reinterpret_cast<DWORD>( this ) ) );
    }
    pour plus d'infos détaillées sur le sujet, tu peux aussi chercher le msdn
    HOWTO: Sort Items in a CListCtrl in Report View
    vala..
    pratiquement, prends le lien que je t'ai indiqué, ce sera une bonne base et au moins tu auras quelque chose qui marche pour t'exercer..
    aprés, toutes les customisations sont possibles..
    amuses toi bien!

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    C'est bon ca marche avec ce code

    Ca me permet de mettre une touche finale a mon petit projet perso.

    merci beaucoup !!!!!!!!!!!!!!

  19. #19
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    ajoute les élements par int InsertItem( const LVITEM* pItem );

    et remplie bien le LPARAM lParam; de LVITEM car si tu lis le commentaires :


    lParam
    32-bit value specific to the item. If you use the LVM_SORTITEMS message, the list view control passes this value to the application-defined comparison function. You can also use the LVM_FINDITEM message to search a list view control for an item with a specified lParam value

  20. #20
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2006
    Messages : 71
    Par défaut
    Bonjour,

    J'ai lu et relu les exemples, et il y a quelque chose qui m'échappe toujours : comment définit-on les données lParam qui vont être passés dans la fonction SortList ?
    (Pour ma part, je reçois tjs des valeurs nulles)

    Je remplis ma liste avec InsertItem et non SetItem, ainsi j'imagine que je dois remplir correctement le champ lparam du LVITEM. Seulement je ne sais pas quoi mettre ! Qu'est ce que ce "32-bit value of the item" ?

    Citation Envoyé par la drogue c'est mal Voir le message
    ajoute les élements par int InsertItem( const LVITEM* pItem );

    et remplie bien le LPARAM lParam; de LVITEM car si tu lis le commentaires :
    De plus, selon la colonne cliquée, il va falloir trier selon des textes différents. Comment spécifier dans quelle colonne chercher le texte à trier ?

    Tout éclaircissement est vivement bienvenu !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Trier les éléments d'une datagrid (RAI MVVM)
    Par SIC83 dans le forum Silverlight
    Réponses: 4
    Dernier message: 11/02/2012, 17h26
  2. Réponses: 2
    Dernier message: 29/10/2008, 11h13
  3. Trier les éléments d'une boite de dialogue OpenDialog
    Par Gengis_Khan dans le forum Composants VCL
    Réponses: 0
    Dernier message: 17/05/2008, 10h16
  4. Trier les élément d'une ListBox
    Par gluc86 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/01/2008, 14h58
  5. Trier les éléments d'une DropDownList
    Par Med80 dans le forum C#
    Réponses: 6
    Dernier message: 18/04/2007, 19h44

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