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
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
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/
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.
salut,
c'est quoi le pb si tu as mis une formview ,tu sais pas ou mettre ton dessin c'est ça ?
![]()
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...
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:
Voici comment la methode est appelee:
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); }
zero erreur a la compilation mais le prog plante des que je clique le bouton ("debug assertion failed...")
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 }
Si quelqu'un voit cette erreur, ca m'aiderait a resoudre mon probleme je pense.
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
![]()
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
salut,
reponse non ,
un exemple valant mieux qu'un grand discours :
http://farscape.developpez.com/Samples/TestGraph.zip
![]()
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 ?
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();![]()
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:
Normalement c'etait pas plus complique que ca, non
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:
salut,
tu as recuperé mon .h sans modifs ?
c'est a dire tu as laissé les ifdef ifndef ?
![]()
oui pour le moment j'y ai pas touche.
fallait pas ?![]()
non c'est bon .
tu as tente le rebuild all ?
sinon montre moi ton .h de la formview .
![]()
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_)
je voulais dire les sections :#if !defined
et le .h de ta form ?
le rebuild all n'a pas fonctionné ?
Rebuild ca fonctionne mais toujours 7 erreurs...
Voici le .h de la Form a tout hasard
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....
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_)
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 ......
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager