2010-03-04 7 views
1

Je veux communiquer entre deux ou plusieurs fenêtres de dialogue, quand je dis communiquer Cela signifie que je veux utiliser les variables et fonctions dans toutes les boîtes de dialogue avec des valeurs mises à jour .. Donc, ce que j'ai fait est créé trois boîtes de dialogue principales, Considérant 1 fenêtre de dialogue en tant que fenêtre principale où il peut avoir des variables et des fonctions et j'ai créé une variable pointeur pour le maindialog dans d'autres fenêtres .. pour accéder aux variables et fonctions qui sont dans la fenêtre principale ... s'il vous plaît vérifier le code ci-dessous ....Impossible de communiquer entre les boîtes de dialogue en passant leur objet en tant que référence!

first dialog class 
//header 
class MainDialog; 
class FirstDialog : public CDialog 
{ 
    DECLARE_DYNAMIC(FirstDialog) 
public: 
    FirstDialog();//standard constr 
    FirstDialog(MainDialog* pfirstPage);//constructor that i defined 

protected: 
    MainDialog* firstPage; 
}; 
//cpp 
intializing the constructor 

FirstDialog::FirstDialog(MainDialog* pFirstPage) 
    : CDialog(FirstDialog::IDD) 
    ,firstPage(pFirstPage) 
{ 

} 

similarily SecondDialog Class.... 
now i did the following 

MainDialog main(L"Main Dialog"); 
    FirstDialog dialog1(&main); 
    SecondPage dialog2(&main); 
    m_pMainWnd = &dialog1; 
    INT_PTR nResponse = dialog1.DoModal(); 

le problème est, disons que j'ai une variable CString dans maindialog..I peut appeler cette variable et attribuer une valeur dans la première boîte de dialogue ... mais quand j'ai essayé d'accéder à cette valeur dans la secondeDialog..it restreint. Il n'y a pas de valeur..S'il vous plaît ne pas savoir si vous ne pouvez pas comprendre ..

Répondre

1

Un problème potentiel est d'avoir 2 instances différentes de ce dialogue principal, mais cela ne semble pas être le cas.

Est-il possible qu'un autre code écrase la valeur de chaîne définie par le premier dialogue? Pourriez-vous rendre la chaîne non publique et ajouter un getter et un setter, de sorte que vous puissiez facilement avoir un point d'arrêt sur le changement de ce champ? De cette façon, vous verrez quel code y accède.

+0

Je ne suis pas inquiet à ce sujet maintenant ... Je veux savoir comment je peux communiquer entre 2 boîtes de dialogue avec le code ci-dessus ou avec une autre méthode ... Je crois que la méthode get/set ne fonctionnerait pas ... Je suis continuer à travailler .. mais rien ne semble fonctionner .. si vous m'aideriez ce serait génial .. – kiddo

+0

Ce n'est pas vraiment votre question originale, mais de toute façon la façon recommandée de communiquer est à travers une interface. Définissez-en un pour la première boîte de dialogue, avec les méthodes nécessaires au second dialogue et une pour la communication avec le second dialogue. Ensuite, changez vos constructeurs afin qu'ils reçoivent une implémentation de l'interface nécessaire. Cela les fera communiquer en toute sécurité. – Timores

Questions connexes