Tabs, Dialoge und Zugriff auf die Werte



  • Hi

    Ich habe eine Klasse CMyTabCtrl welche von CTabCtrl abgeleitet ist und die dazugehörigen Dialog, beim click auf dem Tab, ladet. Das funktioniert wunderbar.

    Mein Problem ist das ich kein Zugriff auf die Werte der geladenen Dialog bekomme. Obwohl zu jedem Dialog eine Klasse erstellt ist. Ich möchte zum Beispiel von einem Edit Feld einfach denn eingegebenen String holen, der ist jedoch immer leer. So bin ich vorgegangen

    Hauptdialog Headerdatei: Erstelle Objekt von abgleitete Klasse

    ...
    CMyTabCtrl m_IDCTabConfig;
    ...
    

    Hauptdialog cpp Datei: Erstelle Tabs und Initialisiere die Dialoge zu den Tabs. Siehe Unten abgeleitete Klasse

    BOOL CConfigDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
            m_IDCTabConfig.InsertItem(0,_T("Pfade"));
            m_IDCTabConfig.Init();
    
    	return TRUE;  // return TRUE unless you set the focus to a control
    }
    

    Inder folgenden Funktion versuche ich auf ein Editfeld zuzugreifen.Ich erstelle eine neues Objekt von dem TabDialog und versuche darüber auf denn String im Editfeld zuzugreifen. Ist jedoch immer leer

    void CConfigDlg::OnBnClickedButtonSaveToIni()
    {
    	CString path;
    	CConfigTabPath TabPath;  //Dialog welcher angezeigt wird wenn auf denn Tab geklickt wird
    	TabPath.GetDlgItemText(IDC_EDIT_PICTURE_PATH,path);
    }
    

    Wie kann ich auch denn String vom Steuerelement zugreifen ?

    Abgeleitet MyTabCtrl Klasse falls ihr sie braucht um zu verstehen was ich gemacht hab

    CMyTabCtrl::CMyTabCtrl()
    {
    	//dont forget to increase array index x of m_TabPage[x] in header file
    	m_TabPage[0] = new CConfigTabPath;
    
        m_PageNumber = 1;
    }
    
    CMyTabCtrl::~CMyTabCtrl()
    {
    	for(int i=0; i < m_PageNumber; i++)
        {
    		delete m_TabPage[i];
        }//end for
    }
    
    BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
    	ON_WM_LBUTTONDOWN()
    END_MESSAGE_MAP()
    
    // CMyTabCtrl-Meldungshandler
    void CMyTabCtrl::Init()
    {
    	m_CurrentPage=0;
    
    	//init dialog to tab
            m_TabPage[0]->Create(IDD_CONFIG_TAB_PATH, this);
    
    	//show first tab, hide the rest
        m_TabPage[0]->ShowWindow(SW_SHOW);
    
        SetRec();
    }
    
    void CMyTabCtrl::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;
    
        m_TabPage[0]->SetWindowPos(&wndTop, nX, nY, nXz, nYz, SWP_SHOWWINDOW);
    
        for(int i=1; i < m_PageNumber; i++)
        {
    		m_TabPage[i]->SetWindowPos(&wndTop, nX, nY, nXz, nYz, SWP_HIDEWINDOW);
        }//end for
    }
    
    void CMyTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
    {
    	CTabCtrl::OnLButtonDown(nFlags, point);
    
    	if(m_CurrentPage != GetCurFocus())
        {
    		m_TabPage[m_CurrentPage]->ShowWindow(SW_HIDE);
            m_CurrentPage=GetCurFocus();
            m_TabPage[m_CurrentPage]->ShowWindow(SW_SHOW);
            m_TabPage[m_CurrentPage]->SetFocus();
        }//end if
    }
    


  • hat sich erledigt

    vielen dank..für lesen.. Villeicht hilft es jemand anderen ??

    hier ide lösung
    ( (CConfigTabPath*)m_IDCTabConfig.m_TabPage[0] )->GetDlgItemText(IDC_EDIT_PICTURE_PATH,path);


Anmelden zum Antworten