在MFC程序中使用Tab Control控件,具体步骤如下
1.创建项目,主窗体为IDD_TEST_DIALOG
2.在mianDlg中右键添加Tab Control控件
即在Tab 控件中添加控制变量
变量名为tabCtrl
3.在资源视图中添加dialog窗体(作为Tab子对话框),ID为IDD_DIALOG1,修改IDD_DIALOG1的style属性为child(表明为子对话框),Border属性为None
4.在IDD_DIALOG1中添加类tab1,用他来在主dialog中用来操作Tab1
5.在主对话框的Tab控件中添加变量tab1_ctrl(子对话框类)
6.在主对话框的头文件(testDlg.h)中添加子对话框的头文件
#include "tab1.h"//因为在记下来要用到子对话框中添加的类tab1
7.在主对话框类的初始化方法*(OnInitDialog())中添加对Tab控件的初始化(在第一次运行程序的时候对空间的初始化)
tabCtrl.InsertItem(0,_T("测试Tab1"));//第一个Tab页标签显示“测试Tab1”
tab1_ctrl.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1));//创建标签页,IDD_DIALOG1:子对话框ID,IDC_TAB1:Tab控件ID
//获取TAB的客户端矩形框,从而设置各属性页在TAB上的物理位置-xcy
CRect rs; //控制标签控件客户区的位置和大小-xcy
tabCtrl.GetClientRect(&rs); //获取标签控件客户区Rect
rs.top+=20;
rs.bottom-=4;
rs.left+=4;
rs.right-=4;
//根据rs设置子对话框尺寸
tab1_ctrl.SetWindowPos(NULL,rs.left,rs.top,rs.Width(),rs.Height(),SWP_SHOWWINDOW);
8.添加多个Tab页,每+1就重复一次3-7步骤
9.在添加完Tab后,程序运行时候,点击Tab页切换发现并没有出现预期的界面切换的效果,总是显示第一个Tab页,这时候需要对主对话框的Tab控件的控制变量tabCtrl添加点击Tab,切换页面的处理:双击Tab控件,在OnTcnSelchangeTab1方法中添加:
CRect tabRect; // 标签控件客户区的Rect
// 获取标签控件客户区Rect,并对其调整,以适合放置标签页
tabCtrl.GetClientRect(&tabRect);
tabRect.left += 4;
tabRect.right -= 4;
tabRect.top += 20;
tabRect.bottom -= 4;
switch (tabCtrl.GetCurSel())
{
// 如果标签控件当前选择标签为“测试Tab1”,则显示tab1对话框,隐藏tab2对话框
case 0:
tab1_ctrl.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
tab2_ctrl.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
break;
// 如果标签控件当前选择标签为“测试Tab1”,则隐藏tab1对话框,显示tab2对话框
case 1:
tab1_ctrl.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
tab2_ctrl.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
break;
default:
break;
}