CTab中如何使用CTab??? 如题目??在一个主CTab中,每个页都用一个CTab控件,这个该如何操作了??是不是一定先要在主CTab的每个页中创建一个CDialog,然后再这个CDialog上建CTab控件了??还是可以直接创建?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用CPropertySheet和CPropertyPage吧。更简单点。 先是主的Tab中加入Dialog,然后在Dialog中加入子的Tab。 一个主对话框,加入CTab,然后每个CTab再关联相应的对话框去查下CTab的用法,就知道了 一般用CTabCtrl控件时,每个标签页都是与某个对话框关联起来的。 在父对话框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; } } 关于send函数的一个小问题 用VC++如何把域名分析成IP? 串口 + 蓝牙问题 导不出Use Psapi.dll TreeCtrl 图片问题 各位 谢了 取得mac地址 新手提问!在线等待,立即散分!事急矣!! 各路大神速度帮忙看看那 ICE动态链接库的问题 编辑框里显示的double型数据是6.123E-005,如何让它显示成0.00006123,谢谢指点. 如何解决对话框中位图背景覆盖掉控件的问题 WM_CTLCOLORDLG用法的问题
每个CTab再关联相应的对话框
去查下CTab的用法,就知道了
(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;
}
}