Probleme avec une dialog box modale

Résolu
solidsnake88 Messages postés 27 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 13 novembre 2006 - 25 oct. 2006 à 00:35
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 25 oct. 2006 à 22:37
Bonjour à tous.









APrès une journée passé sur le problème je me résoud à vous en faire
part. J'ai une Dialog Box (DB) que je rempli de bouton et patati et
patata pas de problème avec vc++ ca va trés vite. Enfin un bon point
pour Visual que je suis en train de découvrir. Puis je créé une autre
DB (appelons la CTest)avec le super menu insérer dialog je lui
superpose une classe. Je fais la "substituion" de OnInitDialog et je
crée cette fenêtre à partir de ma fenêtre principale avec la ligne :


CTest fenetre; //Creation


fenetre.DoModal();


Là encore tout va bien. Et la arrive le problème je veux recuperer des valeurs qui sont dans la boite de dialogue. D'apres ce que je pense j'ai plusieurs possibilités. La premiere avoir des menbres publics et y faire reference dans la boite mere mais c'est pas tres bien au niveau du cloisenement du code. J'ai alors pensé a faire des getters pour recuperer les variables. Et en fait tout marche pour les variables style int i... Mais par contre je ne peut pas appeller dans un de ces getters la fonction this->GetWindowRect(). Je tombe invariablement sur une erreur me disant que le fichier afxwin2.inl possede une assertion qui ne passe pas a la ligne 105. Avoir de plus pres il y a une ASSERT qui test et qui dit que ma fenetre n'a pas de handle. Alors que cette meme fonction getwindowrect fonctionne parfaitement lors de l'initDialog..... Est ce que lorsque je clic sur ok le this est detruit et donc ca plante? Mais alors pourquoi peut on encore acceder au variable depuis la fenetre principale en faisant fenetre.variable; . Conclusion : comment faire pour recuperer ses coordonnees.

Voila, merci pour les eventuelle reponses.

6 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
25 oct. 2006 à 01:55
Pourquoi ne passes tu pas une structure quelconque a ton contructeur
de dlg, pour ensuite la récupérer a la fin, genre


CTest fenetre;


fenetre.DoModal(&struct_quelconque);

Dans l'event OK du modal, tu rempli la struct, et tu la récupère a la sortie de doModal.

Sinon les dialog non modale font l'affaire grace à enableWindows(SW_HIDE et SW_SHOW)
3
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
25 oct. 2006 à 08:51
Après avoir cliquer sur OK, la fenêtre se ferme et le handle disparait; par contre l'objet existe. Ceux sont les handles des contrôles qui n'existent plus, dans initdialog tous les handles des contrôles existent.
La solution proposée ci-dessus est bonne sauf que DoModal en VC++ ne prend pas de paramètres. Il faut ajouter le pointeur de ta structure à ta boite de dialogue.

louis14
3
solidsnake88 Messages postés 27 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 13 novembre 2006
25 oct. 2006 à 11:06
Effectivement je pense utiliser une structure que je vais passer a mon constructeur. Oui en fait c'est une bonne idee. Merci beaucoup.



Et merci a toi roi soleil tu m'as ECLAIRE sur le sujet. Vraiment merci a vous.
0
solidsnake88 Messages postés 27 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 13 novembre 2006
25 oct. 2006 à 11:10
Et juste un tout petit petit bemol. Quand louis14 tu dis que je dois rajouter le pointeur de ta structure a la boite de dialogue... Concretement ca veux dire quoi? C'est peut etre tres simple mais je ne veux pas passer a cote de quelque chose de clean en faisant ma grosse merde qui fait la meme chose.



Merci a vous deux.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
solidsnake88 Messages postés 27 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 13 novembre 2006
25 oct. 2006 à 11:12
Pour moi ma grosse merde c'etait que dans ma boite de dialogue j'avais une veraible menbre de type structure et je la recuperais par un des getters. C'est de la merde ou ca va?
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
25 oct. 2006 à 22:37
En gros, MFC crée une classe de dlg
CMaDlg : public CDialog
{
  // .ctor
   CMaDlg(STRUCT& s) { m_pUneStruct = &s };
  // membre
  STRUCT* m_pUneStruct;
}

// dans le OnOK, tu la remplis
m_pUneStruct->var = CeQueTuVeux;

// et a la Creation de ta dlg
STRUCT maStruct
CMaDlg dlg(maStruct);
dlg.doModal();

// ICI tu peux utiliser maStruct avec les valeurs remplies dans CMaDlg
0
Rejoignez-nous