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] Dessiner en permanence avec une appli. single document


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut [MFC] Dessiner en permanence avec une appli. single document
    HELLO LE MONDE!

    Accrochez-vous car c'est pas du tout facile!!!!

    Je souhaiterais savoir comment dessiner en permanence (ou à un interval spécifié) dans la fenetre d'une application de type : "MFC Single document".

    Je me suis donc tourné vers OnDraw(pDC) dans laquelle je place mon code d'affichage des graphismes. Mais celle-ci n'est pas appellé tout le temps!!
    Elle est appellé simplement quand la fenetre a besoin d'être redessinée.
    Or, je fait une appli. OpenGL qui se limite pour l'instant à un cube tournant sur lui-même.... donc il faut dessiner en permanence. Oh! à 20ms près quoi.

    Mon idée était ALORS, de créer une fonction timer et de l'appeler toutes les 20ms.
    Dans cette fonction j'écrivais : OnDraw( GetDC() ); + un SetTimer(20ms)
    Pour relancer la procédure 20ms après donc.

    OR! => quand je lance mon application des fois mon cube tourne, des fois il tourne pas !!
    Il faut que je force moi même, donc manuellement, l'affichage en bougeant la fenêtre ou en la redimensionnant....et encore!!
    sitôt la fenetre bougée l'animation s'arrête encore des fois, etc.... jusqu'à ce que j'enclenche un processus "invisible" qui ENFIN, fait boucler l'animation sans que la fenêtre ne soit rafraichi manuellement par mes soins.

    Et quand bien même je rebouge la fenêtre lorsque le cube tourne tout seul, il arrive, je dit bien il arrive, que celle ci ne soit pas redessiné (rafraichi) donc l'animation s'arrête comme précédemment!!

    Pire encore !!
    ET LA C'EST VRAIMENT BIZZARE VOIRE INCROYABLE :
    Il suffit que je rajoute n'importe quoi dans OnDraw() ou autres d'ailleurs, comme fopen() ou un GetDC() dans le vide, ou un truc que ne fait RIEN dans mon programme pour que l'animation tourne tout d'un coup. Incroyable mais VRAI !!

    Un problême de Device Context (DC) passé à mon objet CGluEngine (au début quand la fenetre vient juste d'être créée) qui gère le dessin du cube dans une de ses méthodes peut-être ??
    Je ne pense pas.... le DC Ecran que je passe à mon objet au début est donné grâce à GetDC(). ce pointeur serait il temporaire, ce qui explique l'appli. ne fonctionne pas tout le temps à coup sûr ????

    Voila c'est fini. Si vous pouvez m'aporter vos lumières sur ce problême, limite impossible, je suis ouvert à toutes remarques.

    Séb.

  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 Re: [MFC] Dessiner en permanence avec une appli. single docu
    Citation Envoyé par cyber_N
    HELLO LE MONDE!

    Accrochez-vous car c'est pas du tout facile!!!!

    Je souhaiterais savoir comment dessiner en permanence (ou à un interval spécifié) dans la fenetre d'une application de type : "MFC Single document".

    Je me suis donc tourné vers OnDraw(pDC) dans laquelle je place mon code d'affichage des graphismes. Mais celle-ci n'est pas appellé tout le temps!!
    Elle est appellé simplement quand la fenetre a besoin d'être redessinée.
    Or, je fait une appli. OpenGL qui se limite pour l'instant à un cube tournant sur lui-même.... donc il faut dessiner en permanence. Oh! à 20ms près quoi.

    Mon idée était ALORS, de créer une fonction timer et de l'appeler toutes les 20ms.
    Dans cette fonction j'écrivais : OnDraw( GetDC() ); + un SetTimer(20ms)
    Pour relancer la procédure 20ms après donc.


    OR! => quand je lance mon application des fois mon cube tourne, des fois il tourne pas !!
    Il faut que je force moi même, donc manuellement, l'affichage en bougeant la fenêtre ou en la redimensionnant....et encore!!
    sitôt la fenetre bougée l'animation s'arrête encore des fois, etc.... jusqu'à ce que j'enclenche un processus "invisible" qui ENFIN, fait boucler l'animation sans que la fenêtre ne soit rafraichi manuellement par mes soins.

    Et quand bien même je rebouge la fenêtre lorsque le cube tourne tout seul, il arrive, je dit bien il arrive, que celle ci ne soit pas redessiné (rafraichi) donc l'animation s'arrête comme précédemment!!

    Pire encore !!
    ET LA C'EST VRAIMENT BIZZARE VOIRE INCROYABLE :
    Il suffit que je rajoute n'importe quoi dans OnDraw() ou autres d'ailleurs, comme fopen() ou un GetDC() dans le vide, ou un truc que ne fait RIEN dans mon programme pour que l'animation tourne tout d'un coup. Incroyable mais VRAI !!

    Un problême de Device Context (DC) passé à mon objet CGluEngine (au début quand la fenetre vient juste d'être créée) qui gère le dessin du cube dans une de ses méthodes peut-être ??
    Je ne pense pas.... le DC Ecran que je passe à mon objet au début est donné grâce à GetDC(). ce pointeur serait il temporaire, ce qui explique l'appli. ne fonctionne pas tout le temps à coup sûr ????

    Voila c'est fini. Si vous pouvez m'aporter vos lumières sur ce problême, limite impossible, je suis ouvert à toutes remarques.

    Séb.
    salut ,je ne suis pas allé jusqu'au bout mais :
    tu l'a dis toi même ondraw est appelée lors d'un recouvrement ou la premiere fois .
    dans le timer il ne faut pas appeler ondraw directement mais provoquer l'affichage de ondraw par un invalidate.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Merci farscape !!!!

    Je ne savait pas que Invalidate était associé à "WM_PAINT" qui donc, par l'intermediaire des MFC appellait OnDraw(CDC* pDC).

    Ca marche très bien !! encore merci pour ce problème qui avait trop duré....

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

Discussions similaires

  1. [Portlet] Single Sign On possible avec une appli en JSP
    Par osmoze dans le forum Portails
    Réponses: 4
    Dernier message: 16/03/2006, 17h45
  2. Ouvrir un fichier avec une appli déjà lancée
    Par Cameleon45 dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2006, 17h42
  3. Indy ou Autre composant internet avec une appli Console
    Par Oregon09 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 13/11/2005, 05h07
  4. [MFC ?] lier un javascript avec une application
    Par hiko-seijuro dans le forum MFC
    Réponses: 8
    Dernier message: 10/11/2005, 14h50
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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