Zugriff auf public Variable im Parent Dialog...



  • Hallo, ich möchte aus ein Unterdialog auf eine public Variable des Parent Dialogs zugreifen... Ich weiß allerdings nicht wer das Parent Dialog ist...

    Ich hatte schon mit

    CWnd *WD_Dyn = GetParent();
    WD_Dyn->m_Variablename...
    

    versucht, allerdings ist die Variable kein Element von CWnd, ist auch klar...
    Gibs ein andere Möglichkeit, auf Variablen des Parents zuzugreifen, ohne zu wissen wer der Parent ist?

    Hintergedanke ist, mehrere Dialogs sollen auf diese Klasse zugreifen, allerdings braucht die klasse verschiedene Informationen aus den Parent Klassen... Wie kann ich mir diese Informationen hollen?

    Danke im Voraus...



  • Ist dein Parent dein Mainframe? Vermutlich nicht aber wenn doch dann so:

    CMainFrame* pFrame = dynamic_cast <CMainFrame*> (AfxGetMainWnd());
    	ASSERT(pFrame);
    

    Wenn es die Aufrufende View ist dann so:

    CACRSQLView *pView = (CACRSQLView *) pFrame->GetActiveView();
    

    Dann halt in Kombination:

    CMainFrame* pFrame = dynamic_cast <CMainFrame*> (AfxGetMainWnd());
    	ASSERT(pFrame);
    
    	CACRSQLView *pView = (CACRSQLView *) pFrame->GetActiveView();
    


  • Danke Polofreak aber, wie ich oben schon geschrieben habe, weiß ich nicht wer Parent ist (besser gesagt, sind das immer ein paar verschiedene Fenster)...



  • Tut mir leid aber dann versteh ich nicht so genau was du machen willst!
    So wie ich es momentan verstehe willst du machen gib mir mal ne Variable blabla ich hab keine Ahnung woher aber nicht irgendwoher.
    Und das geht beim besten Willen nicht! Vermutlich willst du was anders machen aber ich weiß nicht so genau was.



  • OK, ich versuche alles nochmal zu erklären 🙂

    parent.h

    ...
    public:
    	DynTabCtrl m_KS_TAB;
    	int m_aktuelleSeite;
    	int m_Seitennummern;
    	CDialog* m_tabellenSeite[4];
    ...
    

    parent.cpp

    ...
    Kundenstamm::Kundenstamm(CWnd* pParent /*=NULL*/)
    	: CDialog(Kundenstamm::IDD, pParent)
    {
    	m_tabellenSeite[0]=new KS_Kundendaten;
    	m_tabellenSeite[1]=new KS_Ansprechpartner;
    	m_tabellenSeite[2]=new KS_Zusatzadresse;
    	m_tabellenSeite[3]=new KS_Memo;
    
    	m_Seitennummern=4;
    
    }
    
    Kundenstamm::~Kundenstamm()
    {
    	for(int nZaehler=0; nZaehler < m_Seitennummern; nZaehler++)
    	{
    		delete m_tabellenSeite[nZaehler];
    	}
    }
    
    BOOL Kundenstamm::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	m_KS_TAB.InsertItem(0, _T("Kundendaten"));
    	m_KS_TAB.InsertItem(1, _T("Ansprechpartner"));
    	m_KS_TAB.InsertItem(2, _T("Zusatzadresse"));
    	m_KS_TAB.InsertItem(3, _T("Memo"));
    
    	m_aktuelleSeite=0;
    	m_tabellenSeite[0]->Create(IDD_KS_Kundendaten, this);
    	m_tabellenSeite[1]->Create(IDD_KS_Ansprechpartner, this);
    	m_tabellenSeite[2]->Create(IDD_KS_Zusatzadresse, this);
    	m_tabellenSeite[3]->Create(IDD_KS_Memo, this);
    
    	m_tabellenSeite[0]->ShowWindow(SW_SHOW);
    	m_tabellenSeite[1]->ShowWindow(SW_HIDE);
    	m_tabellenSeite[2]->ShowWindow(SW_HIDE);
    	m_tabellenSeite[3]->ShowWindow(SW_HIDE);
    
    	m_KS_TAB.SetRec();
    
    	return TRUE;
    }
    ...
    

    DynTabCtrl.cpp

    DynTabCtrl::DynTabCtrl()
    {
    }
    
    DynTabCtrl::~DynTabCtrl()
    {
    }
    
    void DynTabCtrl::SetRec()
    {
    	CRect tabRec, itemRec;
    	int nX, nY, nXz, nYz;
    
    	GetClientRect(&tabRec);
    	GetItemRect(0, &itemRec);
    
    	nX=itemRec.left;
    	nY=itemRec.bottom+1;
    	nXz=tabRec.right-itemRec.left-1;
    	nYz=tabRec.bottom-nY-1;
    
    	/*das brauch ich von Parent*/m_tabellenSeite[0]->SetWindowPos(&wndTop, nX, nY, nXz, nYz, SWP_SHOWWINDOW);
    	for(int nZaehler=1; nZaehler < WD_Dyn->m_Seitennummern; nZaehler++)
    	{
    		/*das brauch ich von Parent*/m_tabellenSeite[nZaehler]->SetWindowPos(&wndTop, nX, nY, nXz, nYz, SWP_HIDEWINDOW);
    	}
    }
    BEGIN_MESSAGE_MAP(DynTabCtrl, CTabCtrl)
    	//{{AFX_MSG_MAP(AU_TabCtrl)
    	ON_WM_LBUTTONDOWN()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // Behandlungsroutinen für Nachrichten AU_TabCtrl 
    
    void DynTabCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
    
    	CTabCtrl::OnLButtonDown(nFlags, point);
    
    	if(/*das brauch ich von Parent*/m_aktuelleSeite != GetCurFocus())
    	{
    		/*das brauch ich von Parent*/m_tabellenSeite[/*das brauch ich von Parent*/m_aktuelleSeite]->ShowWindow(SW_HIDE);
    		/*das brauch ich von Parent*/m_aktuelleSeite=GetCurFocus();
    		/*das brauch ich von Parent*/m_tabellenSeite[/*das brauch ich von Parent*/m_aktuelleSeite]->ShowWindow(SW_SHOW);
    		/*das brauch ich von Parent*/m_tabellenSeite[/*das brauch ich von Parent*/m_aktuelleSeite]->SetFocus();
    	}
    
    }
    

    ich hoffe du weiß jetzt was ich meine... DynTabCtrl ist ein Erweiterung von CTabCtrl...
    Die Idee habe ich von HIER. Ich habe nur versucht das ganze dynamischer zu machen...



  • Mach doch eine Klasse für die Datenhaltung. Dem Dialog gibst du dann den Zeiger auf diese Klasse.
    Ähnlich eben DOC/VIEW


Anmelden zum Antworten