Acceder aux champs d'une CFormView

Acceder aux champs d'une CFormView - C++ - Programmation

Marsh Posté le 31-01-2005 à 16:50:30    

Salut tout le monde!!
 
Voici mon problème :jap: , je voudrais accéder aux variables menbres de ma classe CFormView lorsque que je suis dans une autre classe(par exemple une CDialog).
En effet je voudrais lorsque je modifie une variable de ma CDialog copier la valeur de cette variable dans le champ de ma CFormView.
J'ai essayé de créer une fonction qui permet d'accéder au champ de la CFormView, mais pour pouvoir utiliser cette fonction dans la classe CDialog il faut créer un objet CFormView, et là il me jette.
 
Voila, j'espère que j'ai été assez clair :jap:  

Reply

Marsh Posté le 31-01-2005 à 16:50:30   

Reply

Marsh Posté le 31-01-2005 à 21:19:31    

pour ta CDialog, créé un constructeur qui prendra en paramètre un pointeur vers la CFormView courante :
 

Code :
  1. // CMyFormView.h
  2. class CMyFormView
  3. {
  4.    private:
  5.       int _val;
  6.    public:
  7.       CMyFormView(); // constructeur par défaut
  8.       void SetValue(int);
  9. };
  10. // CMyFormView.cpp
  11. CMyFormView::CallDialog()
  12. {
  13.    CMyDialog theDialog = new CMyDialog(this); // on créé une instance de CMyDialog en passant en paramètre un pointeur vers l'instance courante de CMyFormView
  14.    theDialog.DoModal(); // en admettant que ta dialog soit modale
  15.    [...]
  16. }
  17. CMyFormView::SetValue(int val)
  18. {
  19.    _val = val;
  20. }
  21. // CMyDialog.h
  22. class CMyFormView;
  23. class CMyDialog
  24. {
  25.    private:
  26.       CMyFormView *_view;
  27.    public:
  28.       CMyDialog(); // constructeur par défaut
  29.       CMyDialog(CMyFormView*);
  30.    [...]
  31. };
  32. // CMyDialog.cpp
  33. CMyDialog::CMyDialog(MyCFormView *view)
  34. {
  35.    _view = view;
  36.    [...]
  37. }
  38. CMyDialog::SetFormValue(int x)
  39. {
  40.    _view->SetValue(x);
  41. }


 
j'ai créé un constructeur de CMyDialog qui prend un pointeur vers une CMyFormView.
afin d'accéder aux variables de CMyFormView souhaitées, j'ai créé un accesseur (SetValue() ), qui permet d'éviter de déclarer les variables membre en public (sécurité accrue)


Message édité par Harkonnen le 31-01-2005 à 21:21:16

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 01-02-2005 à 20:04:13    

Merci pour ta reponse!!!
 
Mais en fait, je créé ma boîte de dialogue dans une fonction associée au menu de la fenêtre principale, donc associée à la classe CMainFrame.

Code :
  1. void CMainFrame::OnFileNew()
  2. {
  3. // TODO: Add your command handler code here
  4.     CDlgIntro CarteIntro;
  5.     CarteIntro.DoModal();
  6. }


 
Voila!!
Et donc la je lance ma boite de dialogue.
J'ai essayé de créer un pointeur CMyFormView * dans cette fonction mais je me fais jetter si je rafoute le *.h de la FormView dans un autre cpp.
La fonction CallDialog que tu as créé elle appartient à la FormView et vu que je suis dans la classe CMainFrame je peus pas l'appeler.
Ensuite, lorsque j'essaye de créer un constructeur pour ma boîte de dialogue avec en parametre un pointeur sur ma CFormView et ben il me jette pas, mais j'ai pas accé à mes champs pour autant.

Code :
  1. void CMainFrame::OnFileNew()
  2. {
  3. // TODO: Add your command handler code here
  4.         CDlgIntro CarteIntro(CMyFormView * MyFormView);
  5. CarteIntro.DoModal();
  6. MyFormView->//il se passe rien quand je met la flèche
  7. }


 
Comment fait on pointer CMyFormView * MyFormView vers la CFormView.
J'ai essayé un GetParent(), sans succés.
Enfin bon, je vois pas comment pointer sur cette maudite fenêtre principale et faire en sorte que lorsque je code et que j'appelle la flêche("->" ) il me mette toute les variables de la CFormView.
 
J'espere avoir était assez clair :pt1cable:  
Merci encore

Reply

Marsh Posté le 01-02-2005 à 20:20:47    

Pepedimancho a écrit :

Merci pour ta reponse!!!
 
Mais en fait, je créé ma boîte de dialogue dans une fonction associée au menu de la fenêtre principale, donc associée à la classe CMainFrame.


Ce n'est pas du tout une obligation de l'associer à CMainFrame. Sous VS .NET, l'assistant de création d'évènement pour le menu te permet de choisir la classe dans laquelle tu souhaites traiter l'évènement du menu.
 

Pepedimancho a écrit :


J'ai essayé de créer un pointeur CMyFormView * dans cette fonction mais je me fais jetter si je rafoute le *.h de la FormView dans un autre cpp.


Créer un pointeur vers un CMyFormView ne sert à rien, tu dois récupérer le "this" et pas autre chose.
 
tip : pour récupérer le mainframe de ton application :

Code :
  1. CMainFrame * pFrame = (CMainFrame *)::AfxGetMainWnd();


pour ensuite récupérer la CMyFormView associée au mainframe :

Code :
  1. CMyFormView *pView = (CMyFormView*)pFrame->GetActiveView());


 

Pepedimancho a écrit :


Ensuite, lorsque j'essaye de créer un constructeur pour ma boîte de dialogue avec en parametre un pointeur sur ma CFormView et ben il me jette pas, mais j'ai pas accé à mes champs pour autant.
 
 

Code :
  1. MyFormView->//il se passe rien quand je met la flèche




As tu lu ma réponse précédente ?
Pour accéder à tes champs, il est largement mieux de créer des accesseurs plutot que de rendre tes champs publics.
 

Pepedimancho a écrit :


Comment fait on pointer CMyFormView * MyFormView vers la CFormView.
J'ai essayé un GetParent(), sans succés.


Une CMyFormView est une CFormView, tu peux donc utiliser un pointeur vers une CMyFormView pour pointer vers une CFormView sans utiliser de cast.


Message édité par Harkonnen le 01-02-2005 à 20:21:44

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed