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

VB.NET Discussion :

Picturbox refresh problème


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut Picturbox refresh problème
    Bonjour,

    Sous .NET framework 3.5, j'utilise des classes de ma composition qui implémentent la GDI32 pour dessiner dans un DC, celui d'un picturebox.
    Cela fonctionne. Mais si j'effectue un picturebox.refresh dans mon code, avec les fonctions de dessin dans l'évènement paint du picturebox, rien ne se dessine, il faut que je modifie la taille de la fenêtre, en fait arriver à réduire la fenêtre jusqu'à ce que j'atteigne la zone où doit être dessiner mon élément graphique (une ligne par exemple) pour que celui-ci soit redessiné.

    ???

    Il y a t-il une notion de clipping sous-jacente ? Car sous debug l'événement paint est accéder, mais rien ne ce passe ...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Geo2A Voir le message
    Sous .NET framework 3.5, j'utilise des classes de ma composition qui implémentent la GDI32 pour dessiner dans un DC, celui d'un picturebox.
    Tu utilises pas la classe Graphics ?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Non je n'utilise pas la GDI+ car c'est par trop limité. Comme l'indique mon pseudo je travaille dans l'information géographique, donc je suis amené à gérer un nombre très important d'objets vectoriels, d'images de grandes tailles (12000*10000 pixels ou plus) qui plus est dans une profondeur de couleur que system.drawing.imaging aime pas bien (1 bit par pixel, 256 couleurs), pour les images j'ai créé un Wrapper .NET pour la GFLSDK de XNVIEW (c'est dispo, si qqu'un est intéressé, sur les forum Xnview). Je n'utilise GDI+ que pour les pinceaux et les brosses gérant la transparence.

    Pour la classe graphics je l'utilise simplement avec picturebox.creategraphics et graphics.dispose de façon a obtenir un HDC puis de le libérer.
    Ceci me fait penser que je suis parti d'une supposition peut-être hasardeuse : je ne fais plus de saveDC et restoreDC, supposant que le .Net le faisait à ma place via le creategraphics et le dispose.
    Et il est bien connu que les DC c'est comme les toilettes il faut toujours les laisser dans l'état où on les a trouvés en entrant!
    Mais je ne pense pas que cela vienne réellement de là. (je vérifierai tout de même).

    Ceci dit si qqu'un a une petite idée ...

    A+

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    En fait le problème vient de la disparition de la propriété Autoredraw de VB6.
    Le bitmap de fond du DC est permanent de fait dans VB.NET. Quand un événement OnPaint est déclenché, .NET ne dessine pas dans le DC du PictureBox mais je suppose dans un DC en mémoire, toute l'astuce consiste donc à attribuer aux fonctions GDI32 le HDC provenant de e PaintEventArgs dans l'événement OnPaint. Et à l'extérieur de cet événement (quand comme moi on utilise une classe qui gère le DC) lui attribuer le DC du pictureBox.

    Dans la pratique ma classe comporte une propriété G as graphics qui vaut picturebox1.creategraphics, et en début d'événement paint je lui affecte la valeur e.graphics, et en fin d'événement Paint retour à la normale j'affecte le graphics du picturebox.

    A+

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/08/2006, 15h39
  2. Problème de refresh dans une JTable
    Par vano dans le forum Composants
    Réponses: 3
    Dernier message: 04/05/2006, 14h57
  3. Problème de refresh
    Par squallJ dans le forum Oracle
    Réponses: 2
    Dernier message: 17/01/2006, 16h28
  4. problème de refresh sur une DBGrid
    Par lidouka dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/12/2005, 17h12
  5. [TColorBox] : problème de refresh
    Par PpPool dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/08/2005, 11h09

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