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

Windows Forms Discussion :

Methode OnPaint et Scintillement


Sujet :

Windows Forms

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 4
    Par défaut Methode OnPaint et Scintillement
    Bonjour,

    Je suis entrain de réaliser une application graphique du type Paint dans laquelle je dessine sur un Panel, j'ai donc actuellement le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void pnl_Split_Panel1_Paint(object sender, PaintEventArgs e)
    {
    Graphics surface = e.Graphics;
    surface.SmoothingMode = SmoothingMode.AntiAlias;
    ... 
    }
    Cepandant, je souhaite pouvoir utiliser le Double buffering, et d'après les documentations que j'ai pu trouver, je dois pour cela redéfinir la methode OnPaint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    protected override void OnPaint(PaintEventArgs e)
    {
    Graphics surface = e.Graphics;
    surface.SmoothingMode = SmoothingMode.AntiAlias;
    ...
    }
    Mais je ne parviens pas de cette manière à dessiner sur le panel pnl_Split...

    Pouvez vous m'apporter votre aide ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 4
    Par défaut
    Je vais essayer d'éclaircir un peu tout ça...

    Avec GDI+, il est possible d'utiliser le double buffering sur un Form (System.Windows.Forms) de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            // Constructeur de la fenêtre principale
            public win_Main()
            {
                InitializeComponent();
     
                // Code permettant d'utiliser le double buffering
                SetStyle(ControlStyles.DoubleBuffer, true);
                SetStyle(ControlStyles.UserPaint, true);
                SetStyle(ControlStyles.AllPaintingInWmPaint, true);
     
                ...
            }
    Cela permet d'éviter le scintillement lorsque l'on déplace des formes géométriques par exemple.

    Voilà tout ça c'est bien beau mais dans mon cas, je dessine directement sur un Panel, et la classe Panel ne possède pas de méthode SetStyle qui permet d'activer le DoubleBuffering...

    Donc je souhaitais savoir si vous conaissiez un moyen d'utiliser le DoubleBuffering sur un Panel (Autrement qu'en recréant un composant comme Panel hérité de Forms...)

    Merci d'avance.

  3. #3
    Membre Expert

    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Par défaut Empêcher le rafraichissement
    De façon générale, une facçon d'éviter le scintillement est de passer par la dll "user32.dll :

    [DllImport("user32.dll")]
    public static extern bool LockWindowUpdate(IntPtr handleWndLock);
    LockWindowUpdate(control.Handle);

    Ainsi, ton écran ne se redessine plus. Quand tu as fini, tu fais :

    LockWindowUpdate(IntPtr.Zero);
    control.Refresh();

    Et ainsi, si tu modifie plusieurs parties de ta Form, ça t'évite de les voir changer une par une.

Discussions similaires

  1. utilisation de OnPaint-Methode
    Par sdums dans le forum Windows Forms
    Réponses: 0
    Dernier message: 30/01/2010, 16h19
  2. comment eviter le scintillement dans OnPaint?
    Par sth56 dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 05/09/2009, 20h29
  3. OnPaint fait scintiller les objets
    Par rikidude dans le forum Windows Forms
    Réponses: 7
    Dernier message: 29/03/2008, 08h56
  4. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 10h21
  5. Methode de drcherche a l,interieur de basse de donner texte
    Par philippe V dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 03/12/2002, 11h20

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