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 :

Rafraichir forme graphique


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Rafraichir forme graphique
    Bonjour,

    Je cherche à rafraichir une forme à chaque fois que la fenêtre est redimensionnée. Est-il possible de la redimensionner en retracant l'affichage effectuée avec drawPolygone depuis une premiere fonction?

    PS : La fonction Refresh ne convient pas, elle ne retrace pas la partie graphique

    Merci d'avance pour vos reponses

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Normalement, tout traçage est supposé être fait dans le OnPaint() ou le OnDraw(). Ces fonctions sont appelées automatiquement quand la fenêtre est redimensionnée, ou affichée, etc. (OnPaint() pour les fenêtres normales, OnDraw() pour les vues)

  3. #3
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    Il y a bien la méthode Invalidate, qui permet d'appeler OnPaint ou OnDraw, mais c'est vrai que normalement ça se fait automatiquement lors d'un redimensionnement...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Je ne comprends pas, j'ai bien surcharge ma fonction OnPaint de la classe Dessin.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public ref class Dessin : Form
    {
    	public : void OnPaint(PaintEventArgs^ e ,System::Drawing::Pen ^pen, array<PointF>^ CurvePt, System::Drawing::Graphics^formGraphics) 
    	  {
         	  formGraphics->DrawPolygon(pen,CurvePt);
    	  OnPaint(e);
          }
     
     
     
    };
    et je fais appel a la fonction de la maniere suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     D.OnPaint(e2,myPen,CurvePt,formGraphics);
    Ou est-ce que je me suis trompé?

  5. #5
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Ce n'est pas à toi d'appeler la méthode OnPaint()!
    C'est l'interception d'un message WM_PAINT par ton application qui appelle cette méthode. Ce message est envoyé à chaque redimensionnement, rafraichissement,... Tu as juste à placer ON_WM_PAINT() entre BEGIN_MESSAGE_MAP et END_MESSAGE_MAP pour que l'application passe dans ce OnPaint().

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Euh, attends, c'est une classe .Net ça.

    Tu utilises l'intégration Windows Forms/MFC, ou bien tu ne sais pas ce que tu fais?

  7. #7
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Ah oui, maintenant que tu les dis, la déclaration de la classe me paraissait bizarre...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Oui, la je suis perdu medinoc.

    Je recupere un code dans lequel il n'y a pas la fonction OnPaint et qui trace un graphique sur une nouvelle forme mais le rafraichissement ne se fait pas.

    Je vais te poster le code.

    Voici la classe Dessin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public ref class Dessin 
    {
    	public : void OnPaint(PaintEventArgs^ e ,System::Drawing::Pen ^pen, array<PointF>^ CurvePt, System::Drawing::Graphics^formGraphics) 
    	  {
          // If there is an image and it has a location,
          // paint it when the Form is repainted.
    	  formGraphics->DrawPolygon(pen,CurvePt);
    	 //OnPaint(e);
          }
    };



    Declaration de la nouvelle forme créée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    #pragma once
     
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
     
     
    namespace WinAppCLR_02 {
     
    	/// <summary>
    	/// Description résumée de Form_Gr
    	///
    	/// AVERTISSEMENT*: si vous modifiez le nom de cette classe, vous devrez modifier la
    	///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée
    	///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
    	///          les concepteurs ne pourront pas interagir correctement avec les ressources
    	///          localisées associées à ce formulaire.
    	/// </summary>
    	public ref class Form_Gr : public System::Windows::Forms::Form
    	{
    	public:
    		Form_Gr(void)
    		{
    			InitializeComponent();
    			//
    			//TODO*: ajoutez ici le code du constructeur
    			//
    		}
     
    	protected:
    		/// <summary>
    		/// Nettoyage des ressources utilisées.
    		/// </summary>
    		~Form_Gr()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
     
    	protected: 
     
     
    	private:
    		/// <summary>
    		/// Variable nécessaire au concepteur.
    		/// </summary>
    		System::ComponentModel::Container ^components;
     
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
    		/// le contenu de cette méthode avec l'éditeur de code.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->SuspendLayout();
    			// 
    			// Form_Gr
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(804, 664);
    			this->Name = L"Form_Gr";
    			this->Text = L"Form_Gr";
    			this->Load += gcnew System::EventHandler(this, &Form_Gr::Form_Gr_Load);
    			this->ResumeLayout(false);
     
    		}
    #pragma endregion
    	private: System::Void Form_Gr_Load(System::Object^  sender, System::EventArgs^  e) {
    				 System::Drawing::Pen^ myPen =
    					 gcnew System::Drawing::Pen(System::Drawing::Color::Red);
    				 System::Drawing::Graphics^ formGraphics;
    				 formGraphics = this->CreateGraphics();
    				 formGraphics->DrawLine(myPen, 0, 0, 200, 200);
    				 delete myPen;
    				 delete formGraphics;
    			 }
    	public:
    		void Form_Gr::Plot_Gr(void)
    		{
    			System::Drawing::Pen^ myPen =
    					 gcnew System::Drawing::Pen(System::Drawing::Color::Blue);
    			System::Drawing::Graphics^ formGraphics;
    			formGraphics = this->CreateGraphics();
    			formGraphics->DrawLine(myPen, 0, 0, 200, 200);
    			delete myPen;
    			delete formGraphics;
    		}

    L'appel a la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    private: System::Void button9_Click(System::Object^  sender, System::EventArgs^  e)
    		 {
    	Dessin D;
    	PaintEventArgs^ e2;
        String ^FileName="DATA.MS";
        //String ^dir_offset="6755391";
        //String ^num_records="20525";
        String ^dir_offset;
        String ^num_records;
        Read_Dir_os_rt_ts ^myRDir;
     
    	//data_offset=Read_Dir_os_rt_ts::data_offs.ToString();
    	dir_offset=Read_Dir_os_rt_ts::dir_offs.ToString();
    	num_records=Read_Dir_os_rt_ts::num_recs.ToString();
     
        myRDir=gcnew Read_Dir_os_rt_ts(FileName,dir_offset,num_records);
        int N;
    // Initialisation variables static
     
     
    	N=myRDir->ts->Length;
        Read_Dir_os_rt_ts::os_1 = gcnew array<Int32 ^>(N);
        Read_Dir_os_rt_ts::rt_1 = gcnew array<Int32 ^>(N);
        Read_Dir_os_rt_ts::ts_1 = gcnew array<Int32 ^>(N);
     
    	for (int i=0;i<N;i++){
    		Read_Dir_os_rt_ts::os_1[i]=myRDir->os[i];
    		Read_Dir_os_rt_ts::rt_1[i]=myRDir->rt[i];
    		Read_Dir_os_rt_ts::ts_1[i]=myRDir->ts[i];
    	}
     
    	System::Windows::Forms::Form ^fgr=gcnew Form_Gr();
    	System::Drawing::Pen^ myPen = gcnew System::Drawing::Pen(System::Drawing::Color::Blue);
        System::Drawing::Graphics^ formGraphics;
     
    	N=10;
    	  for (int i=0;i<N;i++){
    		 textBox3->Text=textBox3->Text + myRDir->ts[i] + Environment::NewLine ;
    		 textBox3->Text=textBox3->Text + "static " + Read_Dir_os_rt_ts::ts_1[i] + Environment::NewLine ;
    	  }
     
          fgr->Show();
    	  formGraphics = fgr->CreateGraphics();// ->CreateGraphics();
     
     
          N = Convert::ToInt32(num_records);
        array<PointF>^ CurvePt = gcnew array<PointF>(N);
    	int Mxv=(int) myRDir->ts[0];
    	int Mnv=(int) myRDir->ts[0];
    	int a;
    	for (int i=1;i<(myRDir->ts->Length);i++){
    		a=(int)myRDir->ts[i];
    		if (Mxv < a)	Mxv=a;
    		if (Mnv > a)	Mnv=a;
    	}
     
    	for(int i=0;i<N;i++){
    		CurvePt[i].X=i*820.0/N;
    		a=(int)myRDir->ts[i];
    		CurvePt[i].Y=650.0-(a-Mnv)*600.0/(Mxv-Mnv);;
    	}
    		D.OnPaint(e2,myPen,CurvePt,formGraphics);
     
     
    	  delete myPen;
    	  delete formGraphics;
          delete myRDir;
     
     }
    C'est en cliquant sur un bouton qu'une nouvelle forme s'ouvre.
    Merci de m'aider

Discussions similaires

  1. Rafraichir forme principale
    Par Marcel Chabot dans le forum Forms
    Réponses: 10
    Dernier message: 30/05/2008, 19h09
  2. Remplir des formes graphiques avec des motifs (quadrillage, ligne verticale, etc)
    Par La Piotte dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 04/10/2007, 00h16
  3. [Access 2003] Rafraichir le graphique en création
    Par mout1234 dans le forum Access
    Réponses: 4
    Dernier message: 10/01/2007, 10h01
  4. Mise en forme graphique
    Par petitours dans le forum Access
    Réponses: 1
    Dernier message: 15/05/2006, 15h07
  5. Reprensenter JTree sous forme graphique
    Par tony_big_guy dans le forum Composants
    Réponses: 2
    Dernier message: 22/12/2005, 15h40

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