[C++ MFC] Child okna - komunikacja między oknami

0

Jak komunikować się między dwoma oknami Child ?
Mam stworzoną aplikacje typu Dialog - z TabControl (zakładki).
Każda zakładka to oczywiście okno też typu Dialog ale Child.
I jeśli wiem jak pobierać dane z "okna głównego" to już przesył między zakładkami
jest dla mnie zagadką ?
Przykład: Zakładka "first" ma przycisk CheckBox, to jak zakładka "second" ma sprawdzić stan tego
przycisku ?

Ale, łatwiej, powiedzmy że:

GlownyDlg.h

 char MATHER;

GlownyDlg.cpp

// nie istotne więc pomijam

ChildFirst.h

  char BABY;

ChildFirst.cpp

 GlownyDlg* hMoj = (GlownyDlg*) GetParent(); 

  hMoj->MATHER=1;  //to działa, do okna rodzica jest OK, ale.....

ChildSecond.cpp

....jak tu się dostać do danej BABY

      ........   BABY=5;

Pomocy

PS. Pytałem się oto na NEWBIE ale nie było reakcji. Pewnie moderator mnie i tak wyp.. ;)

0

nie powinno byc najmniejszych problemow. na pewno dales w tym ostatnim .cpp z#include'owales naglowek pierwszego 'child'?

0

Posprzątełem moje #include i chodzi.

Za dużo razy było tych samych #include.
A kolejność jest ważna....

dzięki.

ps. kompiluje się już ok.
ale wystakuje bład DEBUGERA
czuje że nie prześpię tej nocy na szukaniu błedu "ASSERT(::IsWindow(m_hWnd));"
co ciekawe m_hWnd jest OK. sprawdziłem w obudwu Child, ma ten sam adres, więc GetParent(); dobrze czyta.
Może, jesli zakładka jest "pod spodem" to nie ma się do niej dostępu ?

W klasie Second:

CFirst My = (CFirst) GetParent();

            CText.Format("%d ",My->m_CtrLista.GetCheck(0));  //to nie chodzi - bład Assercji

Wiec przetestowałem to samo samej klasie First:

CString CText.Format("%d ",m_CtrlLista.GetCheck(0)); //to chodzi

CFirst My = (CFirst) GetParent();

            CText.Format("%d ",My->m_CtrLista.GetCheck(0));  //to nie chodzi

CTree my;

CText.Format("d ",my.m_CtrLista.GetCheck(0)); //zresztą to także nie chodzi

więc może tu jest błąd ? Jak to ominąć ?

0

nie calkiem rozumiem ponizsze:

pajero napisał(a)

Wiec przetestowałem to samo samej klasie First:

CString         CText.Format("%d ",m_CtrlLista.GetCheck(0));  //to chodzi
CFirst *My = (CFirst*) GetParent();

w obiekcie kasy CFirst pobierasz parenta i rzutujesz go a CFirst..? parent powinien zwrocic kontrolke zawierajaca CFirst'a.. mozliwe ze to jest blad i przypadkiem masz szczescie ze wywolanie m_ctrlista trafia w prawidlowy blok pamieci i dopiero GetCheck sprawdzajac m_ctrlista.m_hWnd listy zauwaza ze cos jest nie tak

0

Oczywiście test w samej klasie First nie ma najmniejszego sensu.
Jeśli deklaracje mam w tej klasie to po co korzystać z GetParent().
To miał być test, czy pójdzie (a nie poszło :) bo nie mogło).

Chciałem zwrócić uwagę, że deklaracje z First chce czytać w Second:

CFirst My = (CFirst) GetParent();
CText.Format("%d ",My->m_CtrLista.GetCheck(0)); //to nie chodzi - bład Assercji

i to jest mój problem. Adres wyświelany przez
CText.Format("%d ",My); - w klasie Second
CText.Format("%d ",CFirst); - w klasie First
jest ten sam (test to potwierdził), lecz w obydwu przypakach jest Assercja. Myśle, że podchodze do tematu ze złej strony. Coś niegra, pewnie gdzieś indziej, a ja tego nie wiem i tego "niepanimaju".

Chyba wrócę do assemblera, był łatwiejszy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1