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 :

Rafraichissement de CListCtrl


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut Rafraichissement de CListCtrl
    Bonjour,

    j'ai créé une CListCtrl, et j'ai un problème de rafraichissement. En effet, si elle disparait derrière une boite de dialogue, lorsqu'elle réapparait, il reste le carré blanc de la boite de dialogue...

    j'ai bien essayé avec

    maListe.UpdateWindow();

    mais cela ne fonctionne pas...

    merci pour votre aide!

  2. #2
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    Bonjour tout le monde!

    personne n'a une idée pour ce soucis? vraiment pas?

    merci...

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    la listctrl devrait se réafficher toute seule.
    le controle est actif ? ,le controle est positionné dans une CFormView ,CDialog ?
    verifie les attributs de ton controle dans l'éditeur de ressource,
    le mieux étant de coller un nouveau contrôle et de vérifier les options par défaut..

  4. #4
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    Bonjour,

    dsl de tarder à répondre, j'ai du passer sur autre chose plus urgent!
    Ma CListCtrl est positionnée sur une CDialog, mais elle est créée dynamiquement...
    Ce serait peut être un attribut à rajouter au moment de la création?

    merci!!

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    la ClistCtrl doit avoir l'attribut WS_CHILD et comme parent la dialogue , c'est le cas ?
    sinon montre la création de l'objet.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    Salut,

    oui, j'ai bien mis l'attribut WS_CHILD ...

    voila la création de ma CListCtrl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListDCI.CreateEx(WS_EX_RTLREADING, WS_CHILD | WS_VISIBLE | ES_CENTER , CRect(LISTE_DCI_POS, ZONE_SIZE_LISTE_DCI), this, IDC_LIST_DCI);

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    essaye la version de création Create au lieu de CreateEx pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_myListCtrl.Create(    WS_CHILD|WS_VISIBLE|WS_BORDER ....

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Par défaut
    J'ai testé le CreateEX dans un projet dialog based et le code fonctionne sans problème. Le CListCtrl est correctement redessiné.
    Tu as surement un problème par ailleurs.

    A+

  9. #9
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    Salut,

    j'ai essayé avec le create, mais ça ne fonctionne toujours pas...
    je n'arrive vraiment pas à voir d'où ça peut venir ...


  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    re,
    le style ES_CENTER n'a rien a faire dans la création d'une CListCtrl.
    ce style est réservé aux edits.
    consulte la documentation MSDN pour les styles spécifiques à une CListCtrl.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Par défaut
    sans d'autres info de ta part il sera difficile de t'aider ...

  12. #12
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    C'est vraiment bizarre, si j'enlève ES_CENTER, mes colonnes ne s'affichent plus...

    Citation Envoyé par Pseudo01 Voir le message
    sans d'autres info de ta part il sera difficile de t'aider ...
    et je sais bien, mais je ne sais vraiment pas quoi donner comme explication supplémentaire ...

    tout ce que je fait, c'est créer ma liste comme décrit plus haut, et j'ai essayer de faire ListDCI.UpdateWindow(); après chaque fermeture de la dlg...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Par défaut
    ES_CENTER vaut 1 ce qui est équivalent à LVS_REPORT.

    #define ES_CENTER 0x0001L
    #define LVS_REPORT 0x0001

    Effectivement si tu enlèves ce style du dois être en mode icônes.

    Quel mode souhaites tu avoir ?

    As tu ajouté des colonnes (mode report) ?

    As tu ajouté des items ?

  14. #14
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Alouka Voir le message
    C'est vraiment bizarre, si j'enlève ES_CENTER, mes colonnes ne s'affichent plus...



    et je sais bien, mais je ne sais vraiment pas quoi donner comme explication supplémentaire ...

    tout ce que je fait, c'est créer ma liste comme décrit plus haut, et j'ai essayer de faire ListDCI.UpdateWindow(); après chaque fermeture de la dlg...
    vu comme ça ,ce n'est pas étonnant...
    si la dialogue est fermée le contrôle est détruit.
    du code serait plus précis comme explications...
    je pense que tu devrais consulter la doc de la ClistCtrl ,on ne met pas des styles au hasard, dans ton cas le style correspond a LVS_REPORT comme l'a fait remarquer Pseudo01. et c'est un coup de chance.

  15. #15
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    Salut,

    effectivement, à la lumière d'un lundi matin, mieux reposée et bien moins stressée, je me rends compte à quel point ma remarque était stupide! promis, je serai plus rigoureuse à l'avenir, merci pour votre patience et votre indulgence...

    Je ne peux pas copier / coller mon code, mais je vais essayer d'être la plus claire possible:

    - CListCtrl ListDCI est une variable privée de ma classe qui hérite d'un CDialog.

    - dans la fonction OnInitDialog() de ma classe, je crée ma liste contrôle de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        ListDCI.CreateEx(WS_EX_RTLREADING, WS_CHILD |  WS_VISIBLE | LVS_REPORT , CRect(LISTE_DCI_POS, ZONE_SIZE_LISTE_DCI), this, IDC_LIST_DCI);
    - dans cette même fonction, j'insère mes colonnes avec ListDCI.InsertColumn(...);
    puis je fais :
    ListDCI.ModifyStyleEx(WS_EX_LEFTSCROLLBAR,WS_EX_RIGHTSCROLLBAR);

    - dans une autre fonction d'affichage, j'insère les lignes, en fonction des données qui sont sauvegardées dans une map.

    - ensuite, une autre fonction gère par exemple, le changement de valeur d'une donnée. Pour cela, une dlg de confirmation est affichée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (dlgMess.MessageToDisplay(tmp, CConstantes::S_MESSAGE_CONFIRMATION) == IDOK)
    à la fin de ce traitement, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        ListDCI.UpdateWindow();
        ListDCI.SetFocus();
    pourtant, j'ai toujours ma zone d'ombre, et ma list view ne se réaffiche pas correctement.

    j'espère avoir été un peu plus claire, et merci encore pour votre aide !!

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Par défaut
    Bonjour

    Après test des éléments de ton code : cela fonctionne !

    As tu des problèmes d'affichage avant de faire des mises à jour, dans ce cas il faudrait tester sans les MAJ ?

    Comment sont fait les InsertColum (n° de colonnes 0, 1, 2, 3, ...) ?

    Pourquoi ajoutes-tu :
    ListDCI.ModifyStyleEx(WS_EX_LEFTSCROLLBAR,WS_EX_RIGHTSCROLLBAR);
    c'est déjà le comportement par défaut du CScrollBar (à droite du CListCtrl) ?

    que vaut IDC_LIST_DCI est il utilisé uniquement pour ce CListCtrl ?

    A+

  17. #17
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    Salut!

    je ne pense pas avoir des problèmes d'affichage lors des mises à jour, voila comment cela fonctionne:

    c'est toujours la même fonction d'affichage des lignes qui est appelée, lorsque l'utilisateur modifie une donnée, c'est enregistré dans la map, et les lignes sont réinsérées dans la liste. (oui, je sais, c'est pas vraiment le top, mais j'ai récupéré le code comme ca ...)


    l'insertion des colonnes se fait de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int nc=0; nc<5; nc++)
    {
           ListDCI.InsertColumn(nc,TITRECOLONNES[nc], LVCFMT_LEFT, LARGEURCOLONNES[nc]);
    }
    en fait, j'ajoute ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListDCI.ModifyStyleEx(WS_EX_LEFTSCROLLBAR,WS_EX_RIGHTSCROLLBAR);
    car ma CListCtrl est crée différemment selon le sens d'écriture de la langue utilisée.

    pour l'instant, effectivement, je travaille en français, mais le logiciel peut changer de langue...

    sinon, IDC_LIST_DCI vaut 1030, est cette valeur n'est utilisée nulle par ailleurs dans la solution ...

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Par défaut
    Si tu es sûr de ta fonction de mise à jour. A ce point le reste semble OK.

    Ce que tu peux faire encore c'est de créer un projet minimaliste Dialog based et reprendre les éléments de ton code pour le CListCtrl et ainsi faire le test pour voir si tu obtiens le même comportement.

    A+

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Rafraichissement de la fenetre pendant le traitement
    Par Bobx dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/02/2003, 15h13
  3. [VB6] [Datareport] Pb de rafraichissement
    Par Gadoul dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/02/2003, 10h06
  4. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15
  5. Timage rafraichissment
    Par Rizzla dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/09/2002, 17h08

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