首页 > 代码库 > TabControl控件用法图解[转载]

TabControl控件用法图解[转载]

 

1.创建一个基于对话框的MFC工程,名称设置为“My”。

2.在自动生成的对话框模板中,删除“TODO: Place dialog controls here.”静态文本框、“OK”按钮和“Cancel”按钮。

在对话框资源上从工具箱中添加上一个TabControl控件;

 

3. 根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl

4. 创建两个新的对话框其属性作如下修改:

Border:none //边界为空,这样它就没了标题栏

Style :Child // 这样这个模板就可以当作另一个窗口的子窗口了。

Title Bar:False

在上面加一些控件什么的,具体操作跟普通对话框没有区别。
完成后从这两个对话框模板生成新的对话框类CDlg1,CDlg2。

 

 

5. 在主对话框头文件CMydlg.h中 #include "Dlg1.h"、#include "Dlg2.h",

并为新添加进来的2个类增加2个变量:
 CDlg1 page1;
 CDlg2 page2;

 

6. 在主对话框的OnInitDialog()函数中添加如下类似的代码:

 1     // TODO: 在此添加额外的初始化代码
 2     TCITEM item;
 3 
 4     item.mask = TCIF_TEXT;
 5     item.pszText =_T( "第一页"); 
 6     m_tabctrl.InsertItem (0,&item);      // 插入第一个标签
 7 
 8     item.pszText =_T("第二页");
 9     m_tabctrl.InsertItem (1,&item);     // 插入第二个标签
10 
11     page1.Create (IDD_DIALOG1,&m_tabctrl);     // 创建第一个标签
12     page2.Create (IDD_DIALOG2,&m_tabctrl);    // 创建第二个标签
13 
14     CRect rect;
15     m_tabctrl.GetClientRect(&rect);  // 获取标签控件客户区Rect
16      // 调整tabRect,使其覆盖范围适合放置标签页
17     rect.top+=20;
18     rect.bottom-=4;
19     rect.left+=4;
20     rect.right-=4;
21 
22     page1.MoveWindow(&rect);
23     page2.MoveWindow(&rect);
24     page1.ShowWindow(TRUE);
25     m_tabctrl.SetCurSel(0);
26 
27     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
View Code

 

7. 在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件处理程序,选择可以完成这个操作

 

8.在事件处理中添加如下代码,如下例:

 1 void CMyDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
 2 {
 3     // TODO: Add your control notification handler code here
 4     int CurSel;
 5     CurSel = m_tabctrl.GetCurSel();  //获得选中的页签
 6     switch(CurSel)
 7     { 
 8     case 0:
 9         {
10             /// 如果选中第一个页签时,显示第一页,隐藏第二页
11             page1.ShowWindow(TRUE);
12             page2.ShowWindow(FALSE);
13         }
14         break;
15     case 1:
16         {
17             /// 如果选中第二个页签时,显示第二页,隐藏第一页
18             page1.ShowWindow(FALSE);
19             page2.ShowWindow(TRUE);
20         }
21         break;
22     }
23     *pResult = 0;
24 }
View Code

注意: 为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面的尺寸。