Appel de fonctions dans deux dialog box

Signaler
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005
-
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005
-
Bonjour
J'ignorais exactement quel titre mettre pour decrire mon probleme; en fait je developpe une interface sur visual c++ 6.0, MFC application. Alors dans mon interface j'ai deux dialog box, dialog1 et dialog2. J'ai deux problemes qui vont un peu de paire.
La premiere est la suivante: j'ai cree le dialog2 a partir du dialog1; j'ai acces a toutes les valeurs du dialog2 en etant dans le dialog1 (par exemple en donnant le nom dia2 au deuxieme dialog, pour avoir une valeur il me suffit de faire dia2.*** et j'ai toutes les variables sans probleme) mais l'inverse n'est pas possible; je n'arrive pas a avoir acces aux valeurs du dialog1 en etant dans le dialog2; est-ce que vous pourriez m'aider s'il vous plait?
la deuxieme question va dans le meme sens que la premiere; cela concerne l'appel de fonctions' j'ai un menu dans le dialog1 et j'appelle des fonctions precises pour chaque element du menu; j'aimerais au lieu de revenir toujours au dialog1 pour utiliser le menu, implanter un autre menu dans le dialog2 et faire donc directement appel aux fonctions du menu du dialog1; c'est la ou le probleme se pose car je n'arrive pas a le faire.
En somme mes deux questions se resument a celle-ci: comment avoir acces a des variables ou des fonctions du dialog principal qui est le dialog1 en etant dans le dialog2; j'espere que vous comprenez mon inquietude; j'attends vos reponses precieuses.
Merci

7 réponses

Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
bon apparement tu utilises des classes, ca c'est bien et ca va servir

dans la def de ta classe tu rajoute MaClasse * Pere;

qd tu crée le dialog1, tu changes rien

pour la 2, tu fais Dialog1.Initialise(tes params.. , Dialog1)

comme ca tu pourras enregister un pointeur vers le dialog1 dans le dialog2, et t'en servir:

Dialog2.pere->mes_params;

++

ad

_______________________


Omnia vincit labor improbus
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

merci pour la solution Arnaud, seulement je ne comprends pas tres bien
j'ai cru comprendre que c'est dans la declaration de la classe 2 que je dois
rajouter la declaration de pere; donc ce que j'ai fait dans classe 2 j'ai ajoute
Classe1 *pere; mais j'ai plusieurs erreurs de ce fait; peux-tu stp mieux me
guider? est-ce plutot Classe2 * pere que je dois faire? mais j'en doute fort.
une autre chose c'est que la fonction Initialise n'existe pas chez moi, j'ai plutot
OnInitDialog(qui ne prend aucun argument), est-ce pareil?
La derniere chose, pour m'en servir tu dis d'utiliser Dialog2.pere->params;
etant donne que la declaration de pere se fait dans Classe2, pourrais-je tout
simplement ecrire plutot pere->params?
Merci infiniement et j'attends ta reponse
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
bon dsl pour le retard, j'étais en allemagne

c'est bien Classe1*pere, mais il faut d'abord avoir déclaré ta classe
Classe1, sinon le compilo va pas aimer, dis moi ca que tu as comme
erreurs

pour ta fonction étant donné que c'est toi qui les fait, tu peux aussi les modifier comme tu veux...

a toi de voir, mais normalement oui, ca va

pr ta 3eme question,non ca va pas, pasque qd tu écris pere->params ,
c'est quoi, pere? c'est unn membre de Dialog2, non? alors faut le
préciser, sinon erreur a la compilation

++

ad

_______________________


Omnia vincit labor improbus
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

Merci Arnaud pour ton soutien; j'aurais aime t'annonce de bonnes nouvelles
mais malheureusement j'ai toujours des problemes. Je vais donc te guider dans
tout ce que j'ai entrepris comme tu me l'as conseille.
J'ai deux classes CClasse1Dlg et CClasse2Dlg et donc les fichiers source
Classe1Dlg.cpp et Classe2Dlg.cpp ainsi que les header file Classe1Dlg.h et
Classe2Dlg.h
Je considere par exemple deux elements appartenant a CClasse1Dlg, il s'agit
de l'entier m_ivalue et de la fonction ReadValue(); lorsque je travaille dans
dialog1, j'ai acces a toutes les variables declarees dans dialog2 mais je n'arrive
pas a faire le contraire. Le probleme ici est donc de pouvoir lire dans dialog2,
l'entier m_ivalue ainsi que la fonction ReadValue() qui appartiennent a
CClasse1Dlg.
En suivant tes instructions, voici ce que j'ai fait:
1. dans la definition de CClasse2Dlg c'est-a-dire dans le fichier Classe2Dlg.h
j'ai ajoute ceci:

CClasse1Dlg *pere;

En compilant CClasse2Dlg.cpp j'ai ces erreurs:

c:\modbus\Classe2dlg.h(27) : error C2143: syntax error : missing ';'
before '*'
c:\modbus\Classe2dlg.h(27) : error C2501: 'CClasse1Dlg' : missing
storage-class or type specifiers
c:\modbus\Classe2dlg.h(27) : error C2501: 'pere' : missing storage-class
or type specifiers

J"ai donc change ma declaration dans CClasse2Dlg.h en faisant plutot ceci:
CClasse1Dlg dialog1;

dialog1 *pere;

J'ai toujours des erreurs:

c:\modbus\Classe2dlg.h(27) : error C2146: syntax error : missing ';'
before identifier 'dialog1'
c:\modbus\Classe2dlg.h(27) : error C2501: 'CClasse1Dlg' : missing
storage-class or type specifiers
c:\modbus\Classe2dlg.h(27) : error C2501: 'dialog1' : missing
storage-class or type specifiers
c:\modbus\Classe2dlg.h(28) : error C2143: syntax error : missing ';'
before '*'
c:\modbus\Classe2dlg.h(28) : error C2501: 'dialog1' : missing
storage-class or type specifiers
c:\modbus\Classe2dlg.h(28) : error C2501: 'pere' : missing storage-class
or type specifiers


Voila donc les erreurs que me donne la premiere etape


2. Tu m'as demande d'utiliser la fonction initialise; mais parmi les fonctions
disponibles dans la classe CWnd, c'est plutot OnInitDialog() qui existe.
Alors dans Classe2Dlg.cpp, j'ai cette fonction:

BOOL CClasse2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

............
}

Alors j'ai complete cela :


BOOL CClasse2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
CClasse1Dlg dialog1;
dialog1.OnInitDialog();
............
}

Ce que je viens d'ajouter ne genere pas d'erreurs
Ceci termine l'etape 2


3. Pour faire appel a une variable du dialog1 tu mèas demande de passer ceci:

Dialog2.pere->mes_params;

Un probleme se pose ici; pere appartient au dialog2 et pointe vers le dialog1;
alors une fois que je suis deja dans dialog2 et je veux avoir acces aux variables
de dialog1, je ne comprends pas pourquoi tu me demandes de faire
dialog2.pere(j'ai l'impression que tu penses plutot que c'est dans dialog1 que
je travaille mais c'est plutot dans dialog2); selon moi si je dois lire par exemple
l'entier m_ivalue qui appartient a dialog1 et aussi faire appel a la fonction
ReadValue(), dans mon fichier CClasse2Dlg.cpp, je drvais ecrire en suivant
ton idee:

pere->m_ivalue = 2;
pere->ReadValue();


Fin de l'etape 3

Voila donc Arnaud, je suis desole c'est vraiment long mais il fallait que je
detaille cela afin que tu puisses trouver ou se trouve mon probleme; je n'arrive malheureusement pas a continuer car des la premiere etape j'ai deja des
erreurs.
J'ai pense a declare CClasse1Dlg *pere dans le fichier Classe1Dlg.h au lieu de
Classe2Dlg.h (je sais que c'est faux mais jèai juste voulu essayer) mais avec
cela tout se compile bien, mais une fois a l'execution mon dialogue bloque.
Merci infiniement et j'attends ta reponse car je suis completement bloque
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
bon écoute chuis dsl mais la G la flemme de tout lire, en plus sans le code c'est dur

envoie moi un joli zip avec tout le code, ca doit pas etre tres long et
ca sera 100x plus facile pour moi (t'inquietes, je te le volerai pas
mdr)

pfff, en plus ds de maths demain, tu parles si j'ai envie (vive ma vie)

++

ad

ps: arnaud1602@netmedicom.com, je te l'avais déja donnée mais bon

et je recois un mail a chaque fois que tu rajoutes un msg ici, C pas la
peine de me ré-écrire un msg, apres je crois que des amis qd je
vois:: receiving messages (0 /4) lol
_______________________


Omnia vincit labor improbus
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
bon voila j'ai tout lu

alors

étape 1

le compilo te dit qu'il ne connait pas la classe CClasse1Dlg
dans
CClasse2Dlg; ca veut dire qu'il ne connait pas encore la classe 1Dlg
lorsqu'il analyse la 2Dlg, donc au début de Dlg2.h tu mets #include
"dlg1.h"

Etape 2

encore une fois, tu fonction tu la nomme comme tu veux
je ne comprends pas CDialog
mais ca doit etre pour toi

en tout cas je ne crois pas que ca ait un rapport avec ce pb (si?)

etape 3

ca dépend de quoi on parle

dans la déclaration de 2Dlg, tu peux accéder directement au pere en faisant

pere->params

ou, plus 'pro' (ms ca revient au meme)

this->pere->params

dans main() , il faudra faire

Dlg2.pere->params, sauf si bien sur params est en private, mais ca c'est toi qui vois



dis moi si ca fonctionne tjs pas

++

ad




_______________________


Omnia vincit labor improbus
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

oui Arnaud, concernant l'etape 1 j'ai bel et bien fait le include, maisj'ai
malheureusement toujours le meme probleme; j'avais cree le dialog2 a partir
du dialog1, alors je ne sais pas si c'est ca qui cause probleme, je veux dire
que le dialog1 reconnait le dialog2 et non le contraire; en fait je ne sais vraiment
pas car tout semble correct mais j'ai toujours la meme erreur
concernant l'etape 3 je n'ai pas de fonction main() etant donne que j'utilise les
application MFC
mais bon l'etape 1 me cause tj probleme
merci bien