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 :

le double buffering est il possible avec les Dialog box


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Par défaut le double buffering est il possible avec les Dialog box
    Bonjour a tous,

    Pour mon programme j'ai besoin de rafraichir le contenu d'une boite de dialogue tres souvent (en gros 4 fois par seconde). Or quand je le fais, ça clignotte dans tous les sens.

    J'ai bien entendu parler de la technique du double buffering mais les exemples proposés fonctionnent pour du SDI ou MDI et non de la dialog box.

    J'ai essayé de transposer le système mais j'ai du louper quelque chose car du coup il me rafraichit bien mes graphiques mais n'actualise plus les données textuelles et le fond de l'application n'est plus gris (celui d'une boite de dialogue) mais blanc (celui d'un document).

    Quelqu'un aurait-il une solution pour que je puisse tout actualiser sans perdre d'information et attenuer ce vilain clignottement ?

    Merci d'avance

  2. #2
    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
    si c'est uniquement des données (donc pas de graphique) contenu dans des controles standards, tu peux passer par UpdateData en supposant que tu utilises les ddx

  3. #3
    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
    Peut-être le fais-tu déjà, mais il faut faire attention à une chose: éviter de rafraîchir toute ta boite de dialog, et ne rafraîchir que le(s) controle(s) qui t'intéresse(nt).

    Hope it helps.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Par défaut
    Citation Envoyé par r0d
    ne rafraîchir que le(s) controle(s) qui t'intéresse(nt).
    Comment fais-tu ?

    Le seul moyen que j'ai trouvé de mettre à jour mes graphiques est de passer par la fonction invalidateRect qui met a jour un rectangle particulier.
    Or ceci fait appel à la fonction OnPaint et surement au message de la fenetre correspondant.

    Pour les données textuelles, aucun probleme, le UpdateData(FALSE) marche super bien.

    Mon probleme réside vraiment dans le changement régulier de mes graphiques...

  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
    ton dessin tu le fais dans quel controle ?
    pas sur la surface directe de la dialogue quand meme ?

  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
    Utilise CWnd:: Invalidate(); à bon escient (c'est à dire que quand tu as besoin de rafrîchir l'affichage de ton contrôle, et seulement sur le controle concerné - genre monCEdit->Invalidate(); )

    Hope it helps.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Par défaut
    Citation Envoyé par farscape
    ton dessin tu le fais dans quel controle ?
    pas sur la surface directe de la dialogue quand meme ?
    heu, bah si !
    Vu ta réaction, c'est que ca ne doit pas être la bonne méthode...

    Comment je peux faire autrement ?

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Salut,
    Pour faire du double buffering c'est assez simple, il faut dessiner dans un DC mémoire et ensuite recopier le contenu de ce DC dans le DC de la fenêtre.
    Pour faire cecie, regarde les fonctions CreateCompatibleDC et CreateCompatibleBitmap.

  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
    Par défaut
    re,
    voir cet exemple :
    http://farscape.developpez.com/Samples/TestGraph.zip
    pour placer la zone de dessin dans un controle,apres tu pourras faire du double buffering sur le controle si necessaire..

Discussions similaires

  1. [RegExp] Est-ce possible avec les expressions régulières ?
    Par Difré91 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 10/06/2010, 12h09
  2. [Clés primaires] Est ce possible de les modifier ?
    Par dynexd dans le forum Access
    Réponses: 3
    Dernier message: 29/09/2006, 14h03
  3. Est-ce possible avec sort ??
    Par LE NEINDRE dans le forum Langage
    Réponses: 1
    Dernier message: 22/12/2005, 17h59
  4. [Matrice]Est ce possible avec OpenGL?
    Par bnoix dans le forum OpenGL
    Réponses: 7
    Dernier message: 19/05/2005, 17h47
  5. [IRC] -> Est-ce possible avec JBuilder ?
    Par MaTHieU_ dans le forum JBuilder
    Réponses: 4
    Dernier message: 26/08/2003, 17h24

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