在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; }
