1。建立对话框资源,添加标签控件IDC_TAB1,在标签控件下面添加静态框IDC_STATIC_DLG作为标签页的显示位置区域。
2。标签上面不能直接像对话框一样的拖入相应的空间,所以我们要想在不同的标签页显示内容,就要重新创建对话框,注意,重新创建的对话框dialog的个数应该和你的标签数是一致的,这里我创建了两个标签,所以我又import了两个对话框:IDD_JIAMIDIALOG和IDD_JIEMIDIALOG,属性styles中设置:style为Child,Border设置为None。
到现在对话框的显示的表面工作已经完成,但是运行后仍然不能显示,还要添加如下代码:(我的工程叫AES为例)
1.双击标签控件(下面函数在在AESDlg.cpp中 ),添加下面红色的代码
void CAESDlg::OnSelchangeencript(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int nSelect = m_Tab.GetCurSel();
if (nSelect >= 0)
DoTab(nSelect);
*pResult = 0;
}
2。 在AESDlg.cpp中添加以下函数(我设置了2个标签所以为bTab[2]):
void CAESDlg::DoTab(int nSel)
{
if (nSel>1)
nSel = 1; // 确定nSel值不能超过范围
if (nSel<0)
nSel = 0;
BOOL bTab[2];
bTab[0] = bTab[1] = FALSE;
bTab[nSel] = TRUE;
// 切换对话框的显示和隐藏
SetDlgState(m_jiami, bTab[0]);
SetDlgState(m_jiemi, bTab[1]);
}
void CAESDlg::SetDlgState(CWnd *pWnd, BOOL bShow)
{
pWnd->EnableWindow(bShow);
if (bShow)
{
pWnd->ShowWindow(SW_SHOW);
pWnd->CenterWindow();
}
else pWnd->ShowWindow(SW_HIDE);
}
3。 别忘记在CAESDlg 。h中添加已添加函数的申明哦,否则会报错的哟~
class CAESDlg : public CDialog
{
// Construction
public:
CAESDlg(CWnd* pParent = NULL); // standard constructor
void DoTab(int nSel);
void SetDlgState(CWnd *pWnd, BOOL bShow);
JIAMI *m_jiami; //我给第一个子对话框创建的对象
JIEMI *m_jiemi; //第二个子对话框创建的对象
。。。。
。。。
。。。
}
4。在函数 OnInitDialog中还需要做些工作:
BOOL CAESDlg::OnInitDialog()
{
CDialog::OnInitDialog();
。。。。。
。。。。
// TODO: Add extra initialization here
m_TapImage.Create(16, 16, ILC_COLOR|ILC_MASK, 2, 0); // 创建图像列表
m_TapImage.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); // 将图标加到图像列表中
m_TapImage.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_Tab.SetImageList(&m_TapImage); // 设置TAB控件所使用的图像列表,m_Tab是标签控件的对象
m_Tab.InsertItem(0, "加密", 0);//第一个标签显示
m_Tab.InsertItem(1, "解密", 1);//第二个标签显示
m_Tab.SetCurSel(0); //设置当前标签
m_jiami = new JIAMI;
m_jiami->Create(IDD_JIAMIDIALOG, GetDlgItem(IDC_STATIC_DLG));
m_jiemi = new JIEMI;
m_jiemi->Create(IDD_JIEMIDIALOG, GetDlgItem(IDC_STATIC_DLG));
DoTab(0); //默认显示第一个标签页的内容
return TRUE; // return TRUE unless you set the focus to a control
}
O(∩_∩)O哈哈哈~ 是不是已经可以自由的切换控件了呢 要多调试一下 找个现成的例子看看 就OK啦