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

C++/CLI Discussion :

superposition de fenêtres


Sujet :

C++/CLI

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par défaut superposition de fenêtres
    Bonjour,

    Quand on dessine quelque chose sur une fenêtre et qu'une autre fenêtre vient se superposer, la nouvelle fenêtre efface le contenu de l'ancienne.

    J'ai lu quelque part qu'il fallait régénérer l'image ... Mais je ne trouve pas beaucoup plus d'informations.

    Faut il mémoriser tout ce qui a été fait?
    Y a t-il une instruction pour "photographier" la fenêtre et la reproduire au bon moment?

    Si quelqu'un peut me dire où trouver les infos pour ce genre de choses, ce serait sympa ... Je ne dois pas savoir taper les bons clefs je ne trouve rien bien passionnant sur le sujet.

    Bonne soirée

    Jean-Louis

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 468
    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 468
    Par défaut
    Question très vague.
    Pouvez-vous être plus précis sur le type de votre application ?
    Normalement, vous devez pouvoir régénérer automatiquement votre IHM avec les données que vous devez conserver pour le déroulement de votre programme.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Question très vague.
    Pouvez-vous être plus précis sur le type de votre application ?
    Normalement, vous devez pouvoir régénérer automatiquement votre IHM avec les données que vous devez conserver pour le déroulement de votre programme.

    Bonjour et merci de t'intéresser à mon cas d'ignorant,

    En C++/CLI quand on fait une IHM avec des boutons, du texte, .... développés à partir de la toolbox de Visual C++, il n'y a pas de problèmes; à savoir que si par exemple on minimise la fenêtre et qu'on la développe à nouveau on retrouve bien l'IHM telle qu'elle était auparavant sans rien faire de particulier.

    Par contre si cette fenêtre comporte une zone graphique dans laquelle il y a un dessin, ce dessin se trouve effacé dès que la fenêtre passe en second plan ... et quand on la fait apparaitre à nouveau, il n'y a plus de dessin ...

    Je ne suis pas un expert et avant de me lancer dans un truc compliqué, je voudrais savoir s'il n'y a pas une façon simple de gérer cela.

    Je prends un exemple très simple :

    Je dessine une horloge avec un cadran en fond et des aiguilles tournantes ... le tout est fait en graphique.
    Je cache momentanément mon horloge avec une autre fenêtre et quand mon horloge apparaît à nouveau un bout du fond a disparu (celui qui a été caché par l'autre fenêtre) , si j'ai tout caché il ne reste plus que les aiguilles qui sont rafraichies régulièrement

    Il faut donc redessiner le fond ..

    Y a t-il une astuce pour faire cela ou faut il complètement repasser par la séance de dessin?

    Bonne journée

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 468
    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 468
    Par défaut
    sans rien faire de particulier
    C'est juste que tout les contrôles constituant l'IHM se sont réaffiché sur demande de l'OS grâce au données qu'ils manipulent est stockent. Par exemple, un label a stocké la chaîne qu'il doit afficher et demande à sa fenêtre parent la couleur de fond pour s'afficher de la même couleur que son parent.
    Il n'y a rien de magique dans l'histoire.

    Je crois que le sample "scribble" des vieux SDK illustrait ce type de problématiques.
    http://www.ucancode.net/faq/Visual-csharp-samples.htm

    En clair, soit vous stocker les informations permettant de tous redessiner soit vous utilisez un bitmap pour stocker votre résultat de rendu mais vous ne pourrez pas réagir à des changements de taille des fenêtres, des changements de thème du bureau etc...

  5. #5
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    En fait, la seule chose à faire c'est de faire les dessins (tout ce qui n'est pas dans la toolbox) dans une fonction associée à l'événement Draw de la fenêtre (mais c'est juste pour les WindowsForms(remarque inutile puisque qu'on est sur le forum C++/CLI))

    PS: En mettant du DoubleBufffering, c'est mieux (trouver le paramètre dans les propriétés).

    raphchar

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par défaut
    Bonjour,

    Je reviens sur ce problème que j'ai résolu temporairement mais en le contournant

    Donc je rappelle le problème :

    J'ai une Form avec un dessin réalisé par des Drawline ...

    Premier problème : le dessin n'apparaît pas quand la forme se charge ..

    Deuxième problème : il disparaît quand la Form a été couverte par une autre fenêtre ..

    Donc je le redessine ... ... en utilisant un timer

    Solution efficace, mais un peu stupide

    En fait je tourne en rond dans la doc pour trouver sur quel évènement le redessiner correctement.

    J'ai cherché un peu partout sans trouver d'exemple simple

    Il me semble qu'il y a encore une histoire d'event et de delegate que je n'ai pas bien comprise.

    Si quelqu'un sait où je peux trouver un exemple simple de "redraw" d'une Form après effacement par une autre fenêtre ...

    Bonne soirée

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 468
    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 468
    Par défaut
    Pourquoi ne pas utiliser les fonctionnalités .NET qui réaffiche automatiquement le fond des fenêtres.
    Il suffit de dessiner dans une image transparente et la mettre comme image de fond de votre fenêtre.
    http://www.codeproject.com/KB/buttons/BearForm1.aspx

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

Discussions similaires

  1. [D2007] Ordre de superposition de fenêtres
    Par paradise dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/02/2011, 11h18
  2. Fenêtre principale et secondaire
    Par FranT dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/07/2002, 19h25
  3. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46
  4. pb fenêtre MDI
    Par dédé dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/06/2002, 18h41
  5. icône d'une fenêtre fille
    Par bastien dans le forum C++Builder
    Réponses: 6
    Dernier message: 27/05/2002, 13h46

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