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][C++]Mauvais Rafraichissemnt d'objets graphique ap modifi du fond ecran


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut [MFC][C++]Mauvais Rafraichissemnt d'objets graphique ap modifi du fond ecran
    Bonjour a tous,

    Voila je travail sous microsoft visual studio .Net 2003, je crais un projet de type MFC application et ma classe de base est CFormView. J'ultilise des objets de la ToolBox comme "List Control" par exemple. J'ai dut changer le font de ma fenetre. Pour cela j'ai utilisé le WM_ERASEBKGND (comme conseille sur des sites) et je fais :

    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
    BOOL CbackgroundView::OnEraseBkgnd(CDC* pDC)
    {
             // Fixe une brosse avec la couleur de fond choisie
         CBrush BkClrBrush(RGB(0, 0, 0));
     
         // Sauvegarde l’ancienne brosse.
         CBrush* pOldBrush = pDC->SelectObject(&BkClrBrush);
     
         CRect rect;
         pDC->GetClipBox(&rect);    // récupère la zone a effacer.
     
        pDC->PatBlt(rect.left, rect.top, rect.Width(),rect.Height(), PATCOPY);
     
     
     
         pDC->SelectObject(pOldBrush);// restitue l’ancienne brosse
     
        return true;
    }
    Ca marche tres bien, le probleme étant le rafraichissement de mes objets generés par ma tool box. Des que l'on redessinne un objet du paint (appel d'un Invalidate(), redimenssionement de la fenetre, figure géométrique comme un carré dessinné dans le paint... ) le background (noir dans mon cas) est comme redessinné par dessus mes objets de toolbox ce qui donne un mauvais rafraichissement. Dans le cas ou l'on redessinne assez souvent des objets ca devient n'importe quoi, ca clignote beaucoup trop, ce n'est pas présentable.....

    1- Est ce que j'utilise la bonne methode pour mon font d'ecran?
    2- Est ce que vous comprenez ce que je raconte?
    3- Y a-t-il une solution pour mieux gérer le rafraichissement?
    4- Peut on changer la couleur du font d'un List Control, le mettre de la meme couleur que le font noir et la police blanche, ainsi le rafraichissenent passera mieux.

    Merci

    ps : désolé pour les accents, je suis en angleterre sur un clavier qwerty.

    Cyril


  2. #2
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu as généré une CListView ? ou une CFormView dans laquelle tu as placé un CListCtrl ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Lors de la création de mon projet, j'ai généré un CFormView, ce qui me donne dans ressources->Dialog une fenetre sur font grisé. Alors je prend un objet de la toolbox déja tout fait comme "List Control" et je le fais glisser dans ma fenetre. voila voila

  4. #4
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    si j'ai bien compris ton premier post ,tu as placé une routine de dessin dans le paint de la CFormView ?
    ci c'est le cas mauvaise idée.
    il vaut mieux utiliser la surface d'un controle pour dessiner.
    exemple:http://farscape.developpez.com/Samples/TestGraph.zip
    si c'est des motifs pour compléter le fond d'écran, ces dessins doivent etre situés dans OnEraseBkgnd.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    En faite c'est bien quand je fais appel a un Invalidate() pour afficher mes figures (du style rectangle de couleur) que ca produit ce beug. Tu as raison je vais essayer de dessinner mes figures qui apparaissent et disparaissent dans un controle pour voir si ca marche. Je regarde ton prog et te tiens au courant.

    Merci beaucoup


  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    J'ai inseré mes carrés de couleur comme tu me l'a conseillé dans un control, ils s'affichent bien , mais le probleme est que ces images doivent apparaitre et disparaitre. Leur status dépend de la valeur d'un booléen : true on le voit, false on le voit pas.

    Quand cette variable change de valeur j'appel alors la fonction :

    GetDlgItem(IDC_BUTTONGRAPH)->PostMessage(WM_KEYDOWN,' ');

    Ce qui simule un click sur mon bouton et l'image apparait ou disparait.

    Le truc c'est que ca met beaucoup de temps... A chaque fois que je simule un click de bouton, le prog reste bloqué pendant quelques secondes.... pas tiptop...Donc je ne peux pas l'utiliser comme tel car j'ai besoin que les carrés changent assez vite de status... Une idée?

    Merci

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    ben pourquoi tu ne mets pas un boolean dans la classe du controle que tu changes de l'exterieur pas une fonction , puis invalidate... ?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    He bien en effet ca va plus vite, mais j'en reviens a mon probleme de départ, c'est a dire que j'utilise la fonction Invalidate() et cette fonction fait flashouiller ma Control List a cause du changement de couleur du background qui est noir et mon list control qui est blanc : Ca fait mal aux yeux... Donc je peux pas utiliser Invalidate()

  9. #9
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    invalidate uniquement les controles concernés pas toute la fenetre ...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    oki c'est bon. He bien merci beaucoup tu m'as bien aide. C'etait pas super evident a premiere vue. Je comprenais pas pourquoi les gens s'amusaient a dessinner dans des boutons, maintenant je vois....

    Merci encore

  11. #11
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    oki je vois que tu as trouvé,
    le statut résolu se rajoute avec le menu outils discussion

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/03/2005, 17h15
  2. [Swing][graphics]objets graphiques qui s'effacent
    Par TylerKnoxx dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/08/2004, 16h36
  3. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11
  4. [MFC]arriere plan pour un objet de la classe CStatic
    Par gabriel knight dans le forum MFC
    Réponses: 13
    Dernier message: 28/07/2003, 10h42
  5. Réponses: 3
    Dernier message: 09/02/2003, 01h09

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