如题目??在一个主CTab中,每个页都用一个CTab控件,这个该如何操作了??是不是一定先要在主CTab的每个页中创建一个CDialog,然后再这个CDialog上建CTab控件了??还是可以直接创建??

解决方案 »

  1.   

    使用CPropertySheet和CPropertyPage吧。更简单点。
      

  2.   

    先是主的Tab中加入Dialog,然后在Dialog中加入子的Tab。
      

  3.   

    一个主对话框,加入CTab,然后
    每个CTab再关联相应的对话框
    去查下CTab的用法,就知道了
      

  4.   

    一般用CTabCtrl控件时,每个标签页都是与某个对话框关联起来的。
      

  5.   

    在父对话框CDlgParent中放置一个CtabCtrl控件,比如有两个Tab页,各自关联一个对话框,如CDlgTab1和CDlgTab2,具体做法如下:
    (1)在父对话框CDlgParent头文件中定义CDlgTab1和CDlgTab2两个对话框类的指针对象:CDlgTab1 *m_pTabDlg1;
    CDlgTab2 *m_pTabDlg2;CTabCtrl m_parentTab;
    (2)在父对话框类CDlgParent的OnInitDialog中添加如下代码:

            int i = 0;
    BOOL fOk = FALSE;        m_pTabDlg1 = new CDlgTab1(this);
    if (NULL == m_pTabDlg1)
    {
    return FALSE;
    } fOk = m_pTabDlg1->Create(IDD_TAB1_DLG,&m_tabAlertSet);//IDD_TAB1_DLG是CDlgTab1对话框对应的ID
    if (FALSE == fOk)
    {
    return FALSE;
    } m_parentTab.InsertItem(TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM,i,_T("标签页1"),0,(LPARAM)m_pTabDlg1,0,0);
    i++;
            m_pTabDlg2 = new CDlgTab2(this);
    if (NULL == m_pTabDlg2)
    {
    return FALSE;
    } fOk = m_pTabDlg2->Create(IDD_TAB2_DLG,&m_tabAlertSet);//IDD_TAB2_DLG是CDlgTab2对话框对应的ID
    if (FALSE == fOk)
    {
    return FALSE;
    } m_parentTab.InsertItem(TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM,i,_T("标签页2"),0,(LPARAM)m_pTabDlg2,0,0);
    i++;
    m_parentTab.SetCurSel(0);
    ShowTabDlg(0);//显示标签页中的对话框(3)定义上面调用的ShowTabDlg函数,用于显示标签页:
    void CDlgParent::ShowTabDlg((UINT nItem)
    {
    int i = nItem;
    CRect tRect; switch (i)
    {
    case 0:
    {
    m_parentTab.GetClientRect(&tRect);
    m_parentTab.AdjustRect(FALSE,&tRect); m_pTabDlg1->MoveWindow(&tRect);
    m_pTabDlg1->ShowWindow(SW_SHOW);//点击标签页1时,显示标签页1对话框CDlgTab1 m_pTabDlg2->ShowWindow(SW_HIDE); //掩藏标签页2对话框CDlgTab2 }
    break; case 1:
    {
    m_parentTab.GetClientRect(&tRect);
    m_parentTab.AdjustRect(FALSE,&tRect);
    m_pTabDlg1->ShowWindow(SW_HIDE);//点击标签页2时,掩藏标签页1对话框CDlgTab1
    m_pTabDlg2->MoveWindow(&tRect);
    m_pTabDlg2->ShowWindow(SW_SHOW); //显示标签页2对话框CDlgTab2
    }
    break;
    }
    }(4)为父对话框CDlgParent中的CtabCtrl控件添加TCN_SELCHANGE消息响应函数,用户点击不同的标签页,显示对应的对话框:void CDlgParent::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
    {
    UINT nItem = m_parentTab.GetCurSel();
    ShowAlertSetDlg(nItem); *pResult = 0;
    }(5)由于m_pTabDlg1和m_pTabDlg2的值都是new来的,故要在关闭CDlgParent对话框时用delete释放占用的资源,CDlgParent对话框添加WM_DESTROY消息响应函数OnDestroy:
    void CDlgParent::OnDestroy() 
    {
    CDialog::OnDestroy();

    // TODO: Add your message handler code here
    if(m_pTabDlg1 != NULL)
    {
    m_pTabDlg1->DestroyWindow();
    delete m_pTabDlg1;
    m_pTabDlg1 = NULL;
    }

    if(m_pTabDlg2 != NULL)
    {
    m_pTabDlg2->DestroyWindow();
    delete m_pTabDlg2;
    m_pTabDlg2 = NULL;
      }

    }