1、首先创建一个基于MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab Control的控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl
2、创建两个新的对话框资源,需要修改的属性作如下:
Border:none //边界为空,这样它就没了标题栏
Style :Child // 这样这个模板就可以当作另一个窗口的子窗口了。
然后从这两个对话框模板生成两个新的对话框类CDialog1,CDialog2。
3、在主对话框中为新添加进来的两个类增加两个变量:
CDialog1 m_mm1;
CDialog2 m_mm2;
添加完后,注意加上两对话框的头文件:#include "Dialog1.h",#include "Dialog2.h"
4、在主对话框的OnInitDialog()函数中添加如下类似的代码:
BOOL CTabCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
// TODO: Add extra initialization here
TCITEM item;
item.mask = TCIF_TEXT;
item.pszText = "第一页";
m_tabctrl.InsertItem (0,&item); //插入第一页
item.pszText ="第二页";
m_tabctrl.InsertItem (1,&item);
m_mm1.Create(IDD_DIALOG1,&m_tabctrl); //在主对话框上创建DIALOG1
m_mm2.Create(IDD_DIALOG2,&m_tabctrl);
// m_mm1.SetWindowPos(NULL,10,30,400,100,SWP_SHOWWINDOW);
// m_mm2.SetWindowPos(NULL,10,30,400,100,SWP_HIDEWINDOW);
return TRUE; // return TRUE unless you set the focus to a control
}
解释如下:
InsertItem函数是为了给标签控件增加两个标签页面,文本是标题。
SetWindowPos()函数设置这两个对话框在Z顺序中的位置,显示或隐藏状态.。
5、在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个操作。
在事件处理中添加如下代码,如下例:
void CtabdialogDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
CRect r;
m_tabctrl.GetClientRect(&r); //得到控件矩形区域
switch(m_tabctrl.GetCurSel()) //得到当前页选项
{
case 0:
m_mm1.SetWindowPos(NULL,10,30,r.right-20,r.bottom-40,SWP_SHOWWINDOW); //设置窗口大小及位置
m_mm2.SetWindowPos(NULL,10,30,r.right-20,r.bottom-40,SWP_HIDEWINDOW);
break;
case 1:
m_mm1.SetWindowPos(NULL,10,30,r.right-20,r.bottom-40,SWP_HIDEWINDOW);
m_mm2.SetWindowPos(NULL,10,30,r.right-20,r.bottom-40,SWP_SHOWWINDOW);
break;
}
*pResult = 0;
}
使 对话框 适用于 CTabCtrl 的方法:
新建两个对话框:
属性为:
Border: None
Style: Child
添加相应的类:
CMyDlg1 myDlg1;
CMyDlg2 myDlg2;
CTabCtrl m_TabCtrl;
BOOL CTabCtrlDlg::OnInitDialog()
{
int nPos=0;
m_TabCtrl.InsertItem(nPos++, _T("Dlg1"));
m_TabCtrl.InsertItem(nPos++, _T("Dlg2"));
myDlg1.Create(IDD_Dlg1, &m_TabCtrl);
myDlg2.Create(IDD_Dlg2, &m_TabCtrl);
myDlg1.ShowWindow(SW_SHOW);
myDlg2.ShowWindow(SW_HIDE);
}
BOOL CMyDlg1::OnInitDialog()
{
CRect rc(0,0,0,0);
GetParent()->GetClientRect(& rc);
((CTabCtrl *)GetParent())->AdjustRect(false, &rc);
MoveWindow(&rc);
}
BOOL CMyDlg1::OnInitDialog()
{
CRect rc(0,0,0,0);
GetParent()->GetClientRect(& rc);
((CTabCtrl *)GetParent())->AdjustRect(false, &rc);
MoveWindow(&rc);
}