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 :

Dessiner un repere avec GDI ?


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut Dessiner un repere avec GDI ?
    Bonjour,

    Je voulais juste savoir s'il existe une fonction pour dessiner des reperes (x,y), dont l'echele puisse etre parametrable si possible. Avant de m'attaquer a tout dessiner ligne par ligne...

    Merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut Re
    Pour ceux que ca interesse, je viens de trouevr un site ou c'est explique:


    http://www.functionx.com/visualc/gdi/gdicoord.htm

    par ailleurs ce site est vraiment hallucinant, faites y une tour y en a pour tout les gouts


    http://www.functionx.com/

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Bon en fait je sais vraiment pas comment faire...

    Voila le probleme :

    J'ai cree une CFormView. Je souhaite dessiner un graphique dedans pour afficher les resultats de mon application.

    Quelqu'un peut-il juste me dire par ou je dois commencer a chercher ? Parce que la je ne sais meme pas quoi faire pour me documenter.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    c'est quoi le pb si tu as mis une formview ,tu sais pas ou mettre ton dessin c'est ça ?


  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    sisi bien sur

    Je connait les coordonnes ou je souhaite mettre mon graphique.

    En fait ce serait un graphique (x,y) tout simple, qui afficherait l'evolution d'une de mes variables.

    J'arrive a le dessiner dans la methode OnDraw de la FormView, mais je ne sais pas comment faire pour controler sa mise a jour.

    En effet, j'ai besoin de definir les moments ou mon graphique s'actualise, par exemple, pour changer l'echelle, mais aussi pour rajouter ma variable a chaque iteration.

    Et en mettant un AfxMessageBox dans OnDraw, je vois que cette fonction est appele n'importe comment...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    J'ai un exemple simple qui peut m'aider a resoudre mon probleme:

    Dans ma CFormView, Je souhaite commander le dessin d'un rectangle suite a l'appui sur un bouton. Je cree donc une methode DessineRect que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CFormView::DessineRect(CDC *pDC) 
    {
    	CRect Recto(270,260,600,450);
    	pDC->Rectangle(&Recto);
     
     
    }
    Voici comment la methode est appelee:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void CFormView::OnClickButton() 
    {
     
    	CDC *pDC;
    	pDC = new CDC;
    	DessineRect(pDC);
     
    	// TODO: Add your control notification handler code here
     
    }
    zero erreur a la compilation mais le prog plante des que je clique le bouton ("debug assertion failed...")

    Si quelqu'un voit cette erreur, ca m'aiderait a resoudre mon probleme je pense.

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    Si tu utilises une cformview et non une view ou scrollview (surface de dessin libre)
    Il faut que tu te serves de la surface d’un contrôle pour dessiner ton graphique il ne faut pas dessiner comme ça n’importe ou sinon tu ne pourras pas gérer le rafraîchissement .
    Ce genre de technique est utilisée dans la faq pour afficher un bitmap sur la surface de dessin d’un CButton .
    Le principe est le même au lieu d’afficher le bitmap tu dessines ton graphique dedans ….
    http://c.developpez.com/faq/vc/?page...awBitmapInCtrl


  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    wow
    'comprend rien...
    Pour faire simple, si j'ai bien compris je dois creer une fonction ItemDraw dans ma CFormview ? Ou bien une autre classe ailleurs ?.

    desole j'ai du mal la

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    reponse non ,
    un exemple valant mieux qu'un grand discours :
    http://farscape.developpez.com/Samples/TestGraph.zip

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Merci Farscape!
    Maintenant j'arrive a dessiner sur le bouton de ma FormView (qui fait du coup office de fenetre d'affichage graphique)

    J'ai importer le fichier graphique.cpp et mon bouton est de classe CGraphique maintenant.

    Ca marche, mais comment faire pour controler sa mise a jour ??

    Quand j'appele : CFormview:rawItem(lpDrawItemStruct);

    J'ai le message d'erreur "illegal call of non static member function"

    et quand je declare DrawItem en static, le programme se lance mais plante direct des que DrawItem est appelee

    Tu vois mon erreur ?

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    il suffit de faire un invalidate sur le bouton ...
    d'apres mon sample:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_Graph.Invalidate();

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    OK j'y arrive mais j'ai quelques problemes a importer le fichier graphique.cpp dans mon projet.

    J'ai rajoute #include "graphique.h" dans ma CFormView

    j'ai cree un Bouton dans FormView et je lui ai affecte la classe graphique

    7 erreurs a la compilation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    error C2146: syntax error : missing ';' before identifier 'm_Gfx'
    error C2501: 'Graphique2' : missing storage-class or type specifiers
    error C2501: 'm_Gfx' : missing storage-class or type specifiers
    error C2146: syntax error : missing ';' before identifier 'm_Gfx'
    error C2501: 'Graphique2' : missing storage-class or type specifiers
    error C2501: 'm_Gfx' : missing storage-class or type specifiers
    error C2065: 'm_Gfx' : undeclared identifier
    Normalement c'etait pas plus complique que ca, non :

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu as recuperé mon .h sans modifs ?
    c'est a dire tu as laissé les ifdef ifndef ?

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    oui pour le moment j'y ai pas touche.
    fallait pas ?

  15. #15
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    non c'est bon .
    tu as tente le rebuild all ?
    sinon montre moi ton .h de la formview .

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    en fait je vois pas de ifdef ifndef dans ton .h
    le voici d'ailleurs

    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
     
    #if !defined(AFX_CGraphique_H__3678C815_B327_4941_B8CF_D131FB7D8B1E__INCLUDED_)
    #define AFX_CGraphique_H__3678C815_B327_4941_B8CF_D131FB7D8B1E__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
     
    class CGraphique : public CButton
    {
    // Construction
    public:
       CGraphique();
     
        // Attributes
    public:
     
    // Operations
    public:
     
     
     
    // Overrides
       // ClassWizard generated virtual function overrides
       //{{AFX_VIRTUAL(CGraphique)
       public:
       virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);  
       //}}AFX_VIRTUAL
     
    // Implementation
    public:
     
       virtual ~CGraphique();
     
       // Generated message map functions
    protected:
       //{{AFX_MSG(CGraphique)
          // NOTE - the ClassWizard will add and remove member functions here.
       //}}AFX_MSG
     
       DECLARE_MESSAGE_MAP()
    };
     
    #endif // !defined(AFX_CGraphique_H__3678C815_B327_4941_B8CF_D131FB7D8B1E__INCLUDED_)

  17. #17
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    je voulais dire les sections :#if !defined
    et le .h de ta form ?
    le rebuild all n'a pas fonctionné ?

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Rebuild ca fonctionne mais toujours 7 erreurs...

    Voici le .h de la Form a tout hasard

    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    // essai61View.h : interface of the CEssai61View class
    //
    /////////////////////////////////////////////////////////////////////////////
     
    #if !defined(AFX_ESSAI61VIEW_H__2D7A5C8F_A60D_405C_894C_D01485930B01__INCLUDED_)
    #define AFX_ESSAI61VIEW_H__2D7A5C8F_A60D_405C_894C_D01485930B01__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
     
    class CEssai61View : public CFormView
    {
    protected: // create from serialization only
    	CEssai61View();
    	DECLARE_DYNCREATE(CEssai61View)
     
    public:
    	//{{AFX_DATA(CEssai61View)
    	enum { IDD = IDD_ESSAI61_FORM };
    	Graphique2	m_Gfx;
    	CEdit	m_NewOp;
    	CComboBox	m_Op;
    	CStatic	m_Status;
    	CButton	m_start;
    	CStatic	m_Picture;
    	CEdit	m_min;
    	CEdit	m_max;
    	CEdit	m_width;
    	CDateTimeCtrl	m_time;
    	CButton	m_reset;
    	CEdit	m_rod;
    	CComboBox	m_Ref;
    	CString	m_Refstr;
    	double	m_rodval;
    	double	m_widthval;
    	int		m_minval;
    	int		m_maxval;
    	int		Nb;
    	int		m_Number_of_Rings;
    	//}}AFX_DATA
     
    // Attributes
    	CButton *Up2 ;
    	CButton *Down2;
    	CButton *ok;
    	CButton *ok2;
    	CButton *ok3;
    //	CPen *pPen;
    //	CDC *pDC;
     
     
    public:
    	CEssai61Doc* GetDocument();
     
    // Operations
    public:
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CEssai61View)
    	public:
    	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    	virtual void OnInitialUpdate(); // called first time after construct
    	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
    	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
    	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
    	virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
    	//virtual void OnDraw(CDC* pDC);
     
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	void LoadOperatorsList();
    //	void OnPaint(CPaintDC *pDC);
    	void Run();
     
    	static void UserDialog(int);
    	void UpdateRecentRef();
    	void UpdateComboBox();
    	virtual ~CEssai61View();
    	int OnRangeClickButton(UINT nID);
    	void OnRangeClickButton2(UINT nID2);
     
     
    #ifdef _DEBUG
    	virtual void AssertValid() const;
    	virtual void Dump(CDumpContext& dc) const;
    #endif
     
    protected:
     
    // Generated message map functions
    protected:
    	//{{AFX_MSG(CEssai61View)
    	afx_msg void OnSelendokCombo1();
    	afx_msg void OnSelchangeCombo1();
    	afx_msg void OnDropdownCombo1();
    	afx_msg void OnAddrem();
    	afx_msg void OnChangeEdit1();
    	afx_msg void OnSelect();
    	afx_msg void OnReset();
    	afx_msg void OnStart();
    	afx_msg void OnCancel();
    	afx_msg void OnPause();
    	afx_msg void OnReset2();
    	afx_msg void OnSelendokOperator();
    	afx_msg void OnAddop();
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
     
    private:
     
    	CBitmap Bmp1, Bmp2, Bmp3,  Bmp4,  Bmp5,	 Bmp6, Bmp7, Bmp8,  Bmp9,  Bmp10,  Bmp11,  Bmp12,  Bmp13,  Bmp14,  Bmp15,  Bmp16;
     
    };
     
    #ifndef _DEBUG  // debug version in essai61View.cpp
    inline CEssai61Doc* CEssai61View::GetDocument()
       { return (CEssai61Doc*)m_pDocument; }
    #endif
     
    /////////////////////////////////////////////////////////////////////////////
     
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
     
    #endif // !defined(AFX_ESSAI61VIEW_H__2D7A5C8F_A60D_405C_894C_D01485930B01__INCLUDED_)
    Il y a quand meme un truc bizarre dans le projet que tu ma envoye, il y a un fichier graphique.h mais il n'apparait pas directement dans FileView, il faut l'importer, et il n'y a pas de classe Cgraphique dans Classview alors que l'on s'en sert... Mais peut etre cela n'a rien a voir....

  19. #19
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    rajoute l'include #include "cgraphique.h" au dessus de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    class CEssai61View : public CFormView 
    ......

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Ca Marche!!!!!!!!!!!
    T genial Farscape!
    Merci encore!

    Donc je fais un ptit resume pour ceux qui voudront aussi dessiner un graphique a l'interieur d'une CFormView (un truc de base quand meme )

    Creer une classe CGraph avec une methode DrawItem et s'arranger pour que ca ne plante pas dans son projet (voir posts precedents...)

    Creer un bouton AVEC le style OwnerDraw

    Affecter un controle a ce bouton m_Graph par exemple et le rattacher a la classe CGraph nouvellement creee.

    Maintenant il ne reste plus qu'a dessiner (et c'est ce que je vais faire d'ailleurs...), ca se passe dans la fonction DrawItem, et pour rafraichir la vue, il faut faire m_Graph.Invalidate() dans la Form.

    Voilou

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

Discussions similaires

  1. dessiner en 3D avec GDI+
    Par jesslegende dans le forum VB.NET
    Réponses: 15
    Dernier message: 20/03/2010, 08h50
  2. Dessin avec GDI+
    Par frankthechamp dans le forum Windows Forms
    Réponses: 7
    Dernier message: 01/12/2008, 03h45
  3. Dessiner avec GDI dans un CWindowDC
    Par squale32 dans le forum MFC
    Réponses: 0
    Dernier message: 22/04/2008, 16h00
  4. Réponses: 2
    Dernier message: 02/07/2005, 19h14
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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