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 :

[MFC] Optimiser l'ajout d'element dans une CListBox ?


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    F�vrier 2003
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 6
    Par d�faut [MFC] Optimiser l'ajout d'element dans une CListBox ?
    Hello !

    Je fais un soft qui doit ajouter de nombreux elements dans une CListBox, et ce sous IT timer, mais mon soft est rallentit par la remise � jour de l'affichage de la CListBox ...

    Je cherche le moyen de stopper la mise � jour, d'ajouter mes X elements et de faire un mise � jour une fois les ajouts termin�.

    Si vous avez une id�e ...

    Merci d'avance !

  2. #2
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    D�tails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par d�faut Re
    La solution la plus simple serait que tu d�rive la classe CLIstBox et que tu surcharge additem ou insertitem.

    De l� � chaque appel � ces fonctions : tu stocks les �l�ments avant de les ajouter en block quand tu le veux.

  3. #3
    Nouveau membre du Club
    Inscrit en
    F�vrier 2003
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 6
    Par d�faut
    Hum ... comment ajouter un block d'elements plutot qu'une chaine � une ClistBox ???

    Car je peux alors faire comme tu dis, sans deriver la class ...

    Juste en bufferisant l'ajout des blocks ...

    NB: J'utilise AddString pour ajouter � ma ListBox ...

    Merci en tout cas pour cette reponse rapide, j'attend la suite avec impatience !!!

  4. #4
    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
    pour geler l'affichage :

    LockWindowUpdate

    degeler :

    UnlockWindowUpdate

  5. #5
    Nouveau membre du Club
    Inscrit en
    F�vrier 2003
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 6
    Par d�faut
    LockWindowUpdate

    Je vais essayer �a des que possible !!! Merci .

  6. #6
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    D�tails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par d�faut Re
    Juste ce n'est pas additem mais addstring (Coz je suis encore dans JAVA)

    En fait ce que je voulais te dire c'est de BUFFERISER les �l�ments. Ensuite quand tu le d�sires tu peux utiliser une boucle qui ajoutes tous ces �lements en utilisant la methode de la classe de base

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CListBox::addString( chaine);
    L'autre solution serait de cr�er, comme tu le dis, une methode qui buff�rise, ensuite tu appel les methodes de la classe CListBox.

    le petit Pb est que tu risque d'avoir un petit ralentissemnt temporaire au moment de la mise � jours

  7. #7
    Nouveau membre du Club
    Inscrit en
    F�vrier 2003
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 6
    Par d�faut
    En fait, je cherche � ajouter beaucoup d'elements � ma ClistBox avec AddString, sans que Windows ne fasse une mise � jour d'affichage � chaque ajout.

    Je vais donc essayer LockWindowUpdate

    Merci !

    @++
    Seb.

  8. #8
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    D�tails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par d�faut Re
    Je dis ca comme �a. Mais j'ai eu quelques soucis avec cette fonction

    Blocages des boutons, impossibilit� de faire des unLockWindowUpdate. Si pour toi �a marche tan mieux prends cette m�thode.

  9. #9
    Nouveau membre du Club
    Inscrit en
    F�vrier 2003
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 6
    Par d�faut
    Hi !

    Le LockWindowUpdate semble marcher nickel !!!

    Par contre, il n'est possible de locker qu'une seule fenetre par appli

    Et evidement, j'en ai entre 1 et 5 ...

    Vous avez une astuce ou il faut que je fasse la mise � jour en serie et non plus en parrallele ( ce serait hyper gallere ! ) ...

    Merci d'avance !

  10. #10
    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
    bah non, il faut mettre autant de LockWindowUpdate qu'il y a de fenetre

  11. #11
    Membre �prouv�

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Par d�faut
    Bonjour,

    dans le MSDN on conseille cette methode


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* Step 1: Clear the redraw flag. */ 
       SendMessage(hWndList, WM_SETREDRAW, FALSE, 0L);
     
       /* Step 2: Add the strings. */ 
       for (i = 0; i < n; i++)
          SendMessage(hWndList, LB_ADDSTRING, ...);
     
       /* Step 3: Set the redraw flag. */ 
       SendMessage(hWndList, WM_SETREDRAW, TRUE, 0L);
     
       /* Step 4: Invalidate the list box window to force repaint. */ 
       InvalidateRect(hWndList, NULL, TRUE);
    Salut

  12. #12
    Nouveau membre du Club
    Inscrit en
    F�vrier 2003
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 6
    Par d�faut
    Citation Envoy� par la drogue c'est mal
    bah non, il faut mettre autant de LockWindowUpdate qu'il y a de fenetre
    Dans la doc de la fonction ils disent que l'on ne peut en geler qu'une et apres essai, il semblerait que ce soit vrai !
    ( Je bosse sous NT )

    ... ... ...

    Pipin : Est ce que je peux faire un truc comme ceci :

    send( list, SETREDRAW, FALSE ... )
    [...]
    list.addstring( ... )
    [...]
    send( list, SETREDRAW, TRUE ... )
    invalidaterect( list, TRUE, ... )


    En tout cas, merci � tous pour vos lumieres !!!

  13. #13
    Membre �prouv�

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Par d�faut
    Bonjour,

    Si list est une CListBox

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    list.SetRedraw(FALSE);     
    for (/* loop */) {
        list.AddString("foo"); 
    }
    list.SetRedraw(TRUE);      
    list.Invalidate();         
    list.UpdateWindow();
    Salut

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Ajout bouton ou element dans une Web Part
    Par Farah25 dans le forum SharePoint
    R�ponses: 7
    Dernier message: 19/08/2009, 17h08
  2. ajouter une element dans une table
    Par kohan95 dans le forum VB.NET
    R�ponses: 12
    Dernier message: 22/05/2009, 19h52
  3. R�ponses: 2
    Dernier message: 07/05/2008, 18h24
  4. ajout d'un element dans une liste et modifier son nom
    Par fibi007 dans le forum G�n�ral JavaScript
    R�ponses: 6
    Dernier message: 29/04/2008, 17h50
  5. Ajouter un menu dans une application MFC AppWizard
    Par EmbeddedMan dans le forum MFC
    R�ponses: 3
    Dernier message: 08/02/2007, 16h19

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