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

Visual C++ Discussion :

Affichage permanent dans la View


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut Affichage permanent dans la View
    Bonsoir à tous !

    Dans le cadre d'un projet concernant un jeu de billard, je dois afficher celle-ci ainsi que toutes les billes sur la fenêtre principale.

    Je souhaiterai savoir s'il est possible d'afficher la table une fois pour toute à l'écran, sans l'inscrire dans la fonction OnDraw() pour pas qu'elle soit rafraichit lorsque les billes bougent et qu'il y ait un effet scintillement absolument affreux ... merci d'avance !

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Staticx83 Voir le message
    Bonsoir à tous !

    Dans le cadre d'un projet concernant un jeu de billard, je dois afficher celle-ci ainsi que toutes les billes sur la fenêtre principale.

    Je souhaiterai savoir s'il est possible d'afficher la table une fois pour toute à l'écran, sans l'inscrire dans la fonction OnDraw() pour pas qu'elle soit rafraichit lorsque les billes bougent et qu'il y ait un effet scintillement absolument affreux ... merci d'avance !
    Salut,
    La solution classique consiste à utiliser un 'double buffer'. Tu dessines tout le temps dans un Memory DC et dans le draw tu te contentes de faire un blit. En général, ça évite ces différents effets de scintillement.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut
    D'accord, merci beaucoup pour la réponse je vais aller me renseigner un peu sur google et autres!

    Si quelqu'un a un exemple de code qui utilise le "double buffer" et qui marche je dis pas non hein

    Staticx83

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    L'idée est d'avoir un second CDC utilisé pour le dessin effectif, ensuite dans le draw tu fais un blit. Ca donnerait quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class MyView : public CView
    {
    /*[...]*/
    CDC m_mem_dc;
    };
    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
     
    void MyView::OnInitialUpdate()
    {
    /* [...] */
       CClientDC dc_view(this);
       m_mem_dc.CreateCompatibleDC(&dc_view);
    }
     
    void MyView::OnDraw(CDC *p_paint_DC)
     
    {
    /* [...] */
       m_mem_dc.Rectangle([...]);
       m_mem_dc.SelectObject([...]);
       // ...
       pDC->BitBlt( 0,0,p_paint_DC->GetWindowExt().cx,p_paint_DC->GetWindowExt().cy,
                         &m_mem_dc,
                         0,0,
                         SRCCOPY);
     
    }
    Code à la volée pour te donner un ordre d'idée.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 482
    Par défaut
    Très souvent, le scintillement intempestif est lié au fait que la fenêtre se remplit de la couleur de fond (gris généralement) avant de faire l'affichage dans le OnPaint.

    Pour éviter cela, il y a plusieurs moyens comme, entre autre :
    - afficher les images au moment du remplissage du fond et non dans l’OnPaint
    - indiquer via un flag, lors de la création de la fenêtre je crois, qu'il ne faut pas afficher de couleur de fond pour la fenêtre
    - etc...

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Très souvent, le scintillement intempestif est lié au fait que la fenêtre se remplit de la couleur de fond (gris généralement) avant de faire l'affichage dans le OnPaint.

    Pour éviter cela, il y a plusieurs moyens comme, entre autre :
    - afficher les images au moment du remplissage du fond et non dans l’OnPaint
    - indiquer via un flag, lors de la création de la fenêtre je crois, qu'il ne faut pas afficher de couleur de fond pour la fenêtre
    - etc...
    Pas faux. Surcharger ERASE_BACGROUND et ne rien faire si le paint recouvre toute la zone client.

Discussions similaires

  1. [AC-2010] Affichage permanent scrollbarr dans textbox
    Par francky57 dans le forum IHM
    Réponses: 0
    Dernier message: 27/09/2013, 16h42
  2. Problème dans la view(affichage calendrier)
    Par sajodia dans le forum MVC
    Réponses: 2
    Dernier message: 25/03/2011, 17h33
  3. [VB.NET] Affichage conditionnel dans un repeater
    Par NicoNGRI dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/02/2005, 12h58
  4. Réponses: 2
    Dernier message: 11/05/2004, 11h17
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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