什么是TabCtrl?
1.机制说明
每一个按钮下的操作区域,都是一个窗口(CDialog或CDialogEx)。如果要操作方便,最好还是绑定一个窗口类。
这个控件其实是将多个窗口重叠在下面的操作区域,通过一个函数使得相应的窗口显示而其他窗口隐藏。
2.使用方法
①创建对象:
CTabCtrl m_tab;
②绑定对象:
找到DoDataExchange函数添加:
DDX_Control(pDX,控件的ID,m_tab);
③创建子窗口:
创建数个子窗口及其对应的类,将每个子窗口的Style属性改成Child,Border属性改成None。
类的名字设为PageOne,PageTwo,PageThree等
注释:
Border:无边框(None),细边框(Thin),调整大小(Resizing),对话框外框(Dialog Frame)
Style:重叠(Overlapped),弹出(Popup),子级(Child)
④添加OnInitDialog(非必须)
⑤添加按钮:
在OnInitDialog中添加
m_tab.InsertItem(0,_T("PageOne"));
m_tab.InsertItem(1,_T("PageTwo"));
m_tab.InsertItem(2,_T("PageThree"));
⑥获取并设置子页应该添加的区域
CRect rect;
m_tab.GetClientRect(rect);
m_tab.AdjustRect(FALSE, rect);
⑦添加子页
CPageOne m_Page1;
if(!m_sj.Create(CPageOne::IDD, &m_tab))//添加PageOne子页
return FALSE;
m_Page1.MoveWindow(rect); //将子页移动至相应区域
m_Page1.ShowWindow(SW_HIDE); //设置子页属性为隐藏
添加PageTwo,PageThree子页如法炮制
末尾添加
m_tab.SetCurSel(0); //此成员函数用来从一个标签控件中选择一个标签。
ChangeTabPage(0); //这个函数用来设置子窗口的隐藏和显示,函数体如下:
void ChangeTabPage(int page)
{
if(page < 0 || page >= 3)
return;
CWnd *pageWnd[3] = {&m_Page1, &m_Page2, &m_Page3};
for(int i = 0; i < 3; ++i)
pageWnd[i]->ShowWindow(page != i ? SW_HIDE : SW_SHOW);
}
注:SW_HIDE表示隐藏,SW_SHOW表示显示