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 :

Transferer une CStringList dans une CListBox


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�

    Profil pro
    Inscrit en
    D�cembre 2003
    Messages
    650
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 650
    Par d�faut Transferer une CStringList dans une CListBox
    Bonjour,

    je dois regulierement mettre a jour une listbox en effacant tout ce qu'elle contient et en ajoutant tout un tas de nouvelle donn�e,

    les lignes qui sont ajout� sont cree apres un traitement plutot lourd,

    du coup, pour ne pas avoir de lattence entre le premier et le dernier element ajout�, je pensais passer par une CStringList pour ensuite l'affecter directement � ma listbox, mais je touve pas comment faire sinon, par une boucle et ajout un par un, solution que je ne trouve pas terrible et plutot longue

    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
     
    	CStringList listeTmp;
     
    	listeTmp.RemoveAll();
     
    	for (int i=0; i<10000; i++)
    	{
    		[.... traitement ....] retourne ligne
     
    		listeTmp.AddTail(ligne);
    	}
     
    	POSITION p = listeTmp.GetHeadPosition();
     
    	for (i = 0; i<(int)listeTmp.GetCount(); i++){
    		m_lbListbox.AddString(listeTmp.GetAt(p));
    		listeTmp.GetNext(p);
    	}
    Si vous avez une solution pour afficher plus rapidement .....


    Merci.

  2. #2
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    Il y a, � ma connaissance, au moins 2 moyens de booster l'init d'une listbox :

    1/ pr�-allouer la m�moire n�cessaire aux items qui vont �tre ajout�s ensuite, avec InitStorage() ; �a n�cessite �videmment d'�tre capable d'�valuer � l'avance la taille requise pour stocker toutes les chaines (plus peut-�tre les \0 terminaux ?), ce qui n'est pas toujours possible.

    2/ bloquer les rafraichissements provoqu�s par chaque ajout de chaine en cachant le controle durant le remplissage ; pour �viter l'impression de bug visuel (controle qui disparait puis r�apparait), on peut �ventuellement avoir 2 listboxes identiques superpos�es qu'on utilise et rend visibles/invisibles � tour de r�le.

  3. #3
    Membre �clair�

    Profil pro
    Inscrit en
    D�cembre 2003
    Messages
    650
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 650
    Par d�faut
    mouep, c'est ce qu'il me semblait

    je ne sais pas � l'avance combien cela va faire,

    et du coup, j'ai bien fait comme tu l'as indiqu� :

    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
    	POSITION p = listeTmp.GetHeadPosition();
     
    	imax = (int) listeTmp.GetCount();
     
    	// on gele l'affichage
    	m_lbListbox.SetRedraw(FALSE);
     
    	// on vide la listebox
    	m_lbListbox.ResetContent();
     
    	// on insere tout les elements
    	for (i = 0; i<imax; i++){
    		m_lbListbox.AddString(listeTmp.GetAt(p));
    		listeTmp.GetNext(p);
    	}
     
    	// on  degele et actualise l'affichage
     
    	m_lbListbox.SetRedraw(TRUE);
    	m_lbListbox.Invalidate();
    	m_lbListbox.UpdateWindow();
    par contre, jpige pas pourquoi, quand je remet l'index sur l'ancien avec :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    	m_lbListbox.SetFocus();
    	m_lbListbox.SetCurSel(i);
    	m_lbListbox.UpdateWindow();
    	GetDlgItem(IDC_EDIT1)->SetFocus();
    l'affichage ne montre pas l'item en bleu (selectionne), c'est bizarre,
    et j'essai plein de truc de refresh....

  4. #4
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    En principe si tu fais un ShowWindow(SW_SHOW), il me semble que ce n'est pas n�cessaire de faire en plus un UpdateWindow().

    Mais sinon, si �a ne marche pas, tu peux aussi essayer de :

    - faire un Invalidate() soit � la place de UpdateWindow(), soit avant ;

    - re-s�lectionner l'item courant une fois seulement que le controle est effectivement redevenu visible.

  5. #5
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    Citation Envoy� par rigobert
    En principe si tu fais un ShowWindow(SW_SHOW), il me semble que ce n'est pas n�cessaire de faire en plus un UpdateWindow().
    Woups ! Je n'avais pas vu que tu faisais un SetRedraw() ...

  6. #6
    Membre �clair�

    Profil pro
    Inscrit en
    D�cembre 2003
    Messages
    650
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 650
    Par d�faut
    :d

  7. #7
    Membre �clair�

    Profil pro
    Inscrit en
    D�cembre 2003
    Messages
    650
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 650
    Par d�faut
    Autant pour moi, j'ai fais le blaireau en me loupant d'index de selection,
    ca marche.

    merci.

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est coch�e
    Par JessieCoutas dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 18/08/2009, 13h35
  2. port�e d'une variable dans une fonction dans une m�thode
    Par laurentg2003 dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une m�thode
    Par arnaudperfect dans le forum Langage
    R�ponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    R�ponses: 8
    Dernier message: 21/06/2007, 13h48

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