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

VC++ .NET Discussion :

Comment dessiner ?


Sujet :

VC++ .NET

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 46
    Points
    46
    Par défaut Comment dessiner ?
    Bonjour,
    j'essaye de dessiner dans une winform et j'y arrive pas : voila ce que j'ai fait:

    *création d'une forme avec un picturebox à l'intérieur
    *j'ai fait une procédure qui crée un Graphics associé à la picturebox puis je dessine une ligne simple de travers dans la picturebox
    Cette procedure marche parce que je vois de temps en temps une partie de la ligne ( mais pas toute entière)

    Le problème est que je sais pas ou mettre cette procédure,
    Je la met apres InitializeComponent(); je vois rien
    Je la met dans le Paint :
    private: System::Void pictureBox_Paint(System::Object^ sender, System::Windows::Forms:aintEventArgs^ e) {
    je vois rien non plus

    Alors je l'ai mis dans resize pour voir ce que ce faisait , ca marche à demi: je ne voit que le début de la ligne : il semble qu'on commence d'afficher puis on s'arrête : la ligne n'est alors affciher qu'a moitié.

    J'ai cru voir qu'il y avait un Onpaint mais je ne vois rien dans les methode du picturebloc et je sais pas comment l'utiliser

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 46
    Points
    46
    Par défaut
    J'ajoute que le paint marche en fait mais que je n'ai que la moitié des points affichée , si je fait une fenêtre plus petite , tous les points y sont

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    surcharger la méthode paint est la bonne solution, tu dois avoir un problème dans ton code

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 46
    Points
    46
    Par défaut
    J'ai vu qu'il fallait lancer dans paint mais la je comprend pas trop l'objet graphics .
    bon je travaille donc dans paint
    je lis qu'il faut utiliser la methode creategraphics
    si je fais gp=this->pictureBox->CreateGraphics(); le graphique s'ecrit super vite et s'efface ????
    si je fais gp=gp = e->Graphics ca marche mais le resize merde completement !

    voici mon code :



    private: System::Void pictureBoxFt_Paint(System::Object^ sender, System::Windows::Forms:aintEventArgs^ e) {
    gp = e->Graphics;
    CREATION_GRAPHE ();
    }
    private: System::Void Form_grapheft_Resize(System::Object^ sender, System::EventArgs^ e) {
    RESIZE ();
    }



    void Form_grapheft::CREATION_GRAPHE ()
    {

    //gp=this->pictureBoxFt->CreateGraphics(); test !!!

    SolidBrush ^SB;
    SB=gcnew SolidBrush (System:rawing::Color::Yellow);
    gp->FillRectangle (SB,0,0,LargeurImage,HauteurImage);

    Pen ^penFond;
    penFond=gcnew Pen (System:rawing::Color::Black,1);
    // ecriture d'une croix a travers le picturebox
    gp->DrawLine(penFond,0,0,LargeurImage,HauteurImage);
    gp->DrawLine(penFond,0,HauteurImage,LargeurImage,0);

    }

    void Form_grapheft::RESIZE ()
    {
    System:rawing::Size GeometryPicture;
    GeometryPicture=Form_grapheft::Size;
    // je rentre le picturebox a l'interieur de ma forme
    // je pars toujours de 0,0
    GeometryPicture.Height -= Form_grapheft::menuStrip1->Size.Height+16+30;
    GeometryPicture.Width -= 16+1;
    Form_grapheft::pictureBoxFt->Size=GeometryPicture;
    HauteurImage=this->pictureBoxFt->Height;
    LargeurImage=this->pictureBoxFt->Width;
    Invalidate ();

    }
    void Form_grapheft::INIT_GRAPHE_FT ()
    {
    this->SetStyle ( System::Windows::Forms::ControlStyles::ResizeRedraw, true);
    // definition hauteur et largeur image
    HauteurImage=this->pictureBoxFt->Height;
    LargeurImage=this->pictureBoxFt->Width;
    }
    }


    1/Je comprends pas a quoi sert le Creategraphics

    2/Apres le resize , normalement on relance donc paint ^par Invalidate mais en fait on ne reinitilise pas totalement le graphique alors si on grandi la fenetre , l'ancienne partie de la fenêtre ne change pas .

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 46
    Points
    46
    Par défaut
    Bon , j'ai trouver une solution mais je pige pas pourquoi,
    au lieu de faire Invalidate de la forme je fais :

    this->pictureBoxFt->Invalidate();

    et ca marche .

    Je pensais que Invalidate reinitialisait toute la forme , et bien non .

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Le creategraphics sert à obtenir une reference à la zone de dessin en dehors de la méthode paint.

    Perso, j'aurai utilisé Refresh() au lieu de Invalidate.

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

Discussions similaires

  1. Comment dessiner une ligne dans un Chart ?
    Par libititi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2005, 14h56
  2. Comment dessiner sur un Bitmap sans scintillement ?
    Par TOTO32 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/01/2005, 10h11
  3. DBGrid, comment dessiner dans les titres des colonnes
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 04/11/2004, 17h49
  4. [Transparent] - Comment dessiner sur 2 TImage ?
    Par TOTO32 dans le forum Langage
    Réponses: 15
    Dernier message: 08/08/2004, 01h06

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