Problem mit CTabCtrl in Formview



  • Hallo,

    ich habe ein Problem mit der CTabCtrl:
    Ich habe in meiner FormView ein TabControl eingebunden und mittels einer von CTabCtrl abgeleiteten Klasse auch hinbekommen, neue Registerkarten über Dialoge hinzuzufügen (wie es hier auch schon erklärt wurde). Das Problem ist nun, daß die Dialoge nicht wie ich es eigentlich wollte innerhalb des Tabs sind, sondern als eigentständige Fenster.

    Wie bekomme ich es hin, daß die Dialoge ordnungsgemäß in den Tabs enthalten sind??

    Vielen Dank schon mal!



  • Ich weiß nicht ob es dir viel bringt, aber ich mache das nicht mit dem CTabCtrl sondern mit dem CPropertySheet.
    In das CPropertySheet hänge ich dann CPropertyPage(s).
    Dazu mache ich einfach einen drecksnormalen Dialog und beim Erstellen der Klasse achte ich eben darauf, dass die Klasse anstatt von CDialog von CPropertyPage ableitet.

    Wenn du Code brauchst, kann ich dir ja mal eine Ladung posten.



  • Danke erstmal für die Antwort. Wenn Du ein Beispiel parat hättest, würde ich mich sehr freuen!

    Schicke es doch einfach an cmoucha@raindrop.ws.

    Danke!



  • Ich werde es hier posten - damit die anderen auch etwas davon haben:
    .h

    CPropertySheet m_Sheet;
    CPageA m_PageA;
    CPageB m_PageB;
    
    int m_nPageCount = 2;
    

    Jetzt kommt ein größere Funkion.
    In der werden die Pages dem Sheet hinzugefügt.
    Das Sheet wird erstellt und die Icons werden gesetzt.

    .cpp

    void CDBMoreInfo::CreateAndInitProperty()
    {
    	int i=0;
    
    	//Hier wird das PropertySheet initialisiert
    	m_Sheet.AddPage(&m_PageA);
    	m_Sheet.AddPage(&m_PageB);
    
    	//Bilder formatieren und einfügen...
    	HICON ico;	
    	m_imageSheet.Create(16, 16, ILC_MASK | ILC_COLOR32, m_nPageCount, 4); 
    	ico = AfxGetApp()->LoadIcon(IDI_PAGEA);
    	m_imageSheet.Add(ico);
    	ico = AfxGetApp()->LoadIcon(IDI_PAGEB);
    
    	//Property sheet erstellen...
    	m_Sheet.Create(this, WS_CHILD | WS_VISIBLE, 0);
    	m_Sheet.ModifyStyleEx (0, WS_EX_CONTROLPARENT);
    	m_Sheet.ModifyStyle( 0, WS_TABSTOP );
    
    	CRect rcSheet;
    	GetDlgItem(IDC_SHEET)->GetWindowRect(&rcSheet);
    	ScreenToClient(&rcSheet);
    	m_Sheet.SetWindowPos(NULL, rcSheet.left, rcSheet.top, rcSheet.right, rcSheet.bottom,
    		SWP_NOZORDER | SWP_NOACTIVATE);
    
    	//Bilder setzen
    	m_Sheet.GetTabControl()->SetImageList(&m_imageSheet);
    	TC_ITEM tcItem;
    	tcItem.mask = TCIF_IMAGE;
    	for(i=1; i<=m_nPageCount; i++) {
    		tcItem.iImage = i-1;
    		m_Sheet.GetTabControl()->SetItem(i-1, &tcItem);
    	}
    
    	m_Sheet.GetTabControl()->MoveWindow(0,0, rcSheet.Width(), rcSheet.Height());
    
        // Jetzt rufen wir alle Pages auf.
        // So wird OnInitDialog aufgerufen.
        for(i = 0; i < m_nPageCount; i++) {
          m_Sheet.SetActivePage(i);
        }
        m_Sheet.SetActivePage(0);
    
    }
    

Anmelden zum Antworten