在MFC中使用Tab Control控件实现分页显示和跳转:
1、首先创建一个对话框应用程序。
2、在该对话框上添加Tab控件,然后利用类向导,给Tab控件添加一个Control成员变量m_tabctrl。
3、接着建立两个对话框资源,别忘了把Style改为Child,Border改为None。然后就可以在上面加其他控件了。接着分别为这两个对话框建立两个类,比如CPage1和CPage2。
4、然后在主对话框的头文件中,加入这两个对话框类的对象。
CTabCtrl m_tabctrl;
CPage1 m_page1;
CPage2 m_page2;
5、在主对话框的OnInitDialog成员函数内的添加如下代码:
BOOL CDesEncryptDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) ==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid =strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if(!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon,TRUE); //设置大图标
SetIcon(m_hIcon,FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
//===============================================================
//初始化TAB
TCITEM tc1,tc2;
tc1.mask = TCIF_TEXT;
tc1.pszText = _T("第一页");
tc2.mask = TCIF_TEXT;
tc2.pszText = _T("第二页");
m_tabctrl.InsertItem(0,&tc1);
m_tabctrl.InsertItem(1, &tc2);//到这里只是添加了两个tab页
CRect rec;
m_tabctrl.GetClientRect(&rec);//获得TAB控件的坐标
//定位选项卡页的位置,这里可以根据情况自己调节偏移量
rec.bottom -= 2;
rec.left += 1;
rec.top += 22;
rec.right -= 3;
//创建子页面
m_page1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1));
m_page2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB1));
//将子页面移动到指定的位置
m_page1.MoveWindow(&rec);
m_page2.MoveWindow(&rec);
//显示子页面
m_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
//设置默认的选项卡
m_tabctrl.SetCurSel(0);
//===============================================================
return TRUE; //除非将焦点设置到控件,否则返回 TRUE
}
6、如果要让TAB随着点击显示不同的子Dialog,那么为TAB添加TCN_SELCHANGE事件响应函数。
void CDesEncryptDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT*pResult) //页面切换
{
// TODO: 在此添加控件通知处理程序代码
switch(m_tabctrl.GetCurSel())
{
case 0:
m_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
break;
case 1:
m_page1.ShowWindow(SW_HIDE);
m_page2.ShowWindow(SW_SHOW);
break;
default:
break;
}
*pResult =0;
}