VC2010 使用TAB控件

来源:互联网 发布:淘宝客服短语大全 编辑:程序博客网 时间:2024/06/07 10:01

1. 添加TAB控件并为其关联一个CTabCtrl类型的控件变量m_tab

在对话框点击右键,选择class wizard...

 

 

2. 创建新的对话框,新对话框个数及ID根据设计需要进行修改

    资源视图栏中,在Dialog文件夹右键

对新添的对话框属性进行设置:Border设为None,Style属性设为Child

在各对话框中添加所需控件后,为各对话框生成各自的对话框类:

右键点击需生成类的对话框

在弹出的对话框中: class name为自己取得类名如 CRegDlg; Base class选择CDialog;

点击finish

 

3. 在主对话框的头文件(PCRDlg.h)中包含新添加对话框的头文件(RegDlg.h)

继续在该主对话款类头文件中,为新添的对话框类创建两个成员变量

 

4. 在主对话框的初始化程序中添加如下代码:

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. CRect tabRect;   // 标签控件客户区的位置和大小     
  2.   
  3.     m_tab.InsertItem(0, _T("Register"));         // 插入第一个标签“Register”     
  4.     m_tab.InsertItem(1, _T("Graphic"));  // 插入第二个标签“Graphic”     
  5.     m_RegDlg.Create(IDD_REGISTER_DLALOG, &m_tab);    // 创建第一个标签页     
  6.     m_GraDlg.Create(IDD_GRAPHIC_DIALOG, &m_tab); // 创建第二个标签页     
  7.   
  8.     m_tab.GetClientRect(&tabRect);    // 获取标签控件客户区Rect     
  9.     // 调整tabRect,使其覆盖范围适合放置标签页     
  10.     tabRect.left += 1;                    
  11.     tabRect.right -= 1;     
  12.     tabRect.top += 25;     
  13.     tabRect.bottom -= 1;     
  14.     // 根据调整好的tabRect放置m_jzmDlg子对话框,并设置为显示     
  15.     m_RegDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);     
  16.     // 根据调整好的tabRect放置m_androidDlg子对话框,并设置为隐藏     
  17.     m_GraDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);  


5. 为TAB控件的通知消息TCN_SELCHANGE添加处理函数:

在tab控件上点击右键


 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. void CPCRDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)  
  2. {  
  3.     // TODO: Add your control notification handler code here  
  4.     *pResult = 0;  
  5.   
  6.   
  7.     CRect tabRect;    // 标签控件客户区的Rect     
  8.   
  9.     // 获取标签控件客户区Rect,并对其调整,以适合放置标签页     
  10.     m_tab.GetClientRect(&tabRect);     
  11.     tabRect.left += 1;     
  12.     tabRect.right -= 1;     
  13.     tabRect.top += 25;     
  14.     tabRect.bottom -= 1;     
  15.   
  16.     switch (m_tab.GetCurSel())     
  17.     {     
  18.         // 如果标签控件当前选择标签为“register”,则显示m_regdlg对话框,隐藏m_gradlg对话框     
  19.     case 0:     
  20.         m_RegDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);     
  21.         m_GraDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);     
  22.         break;     
  23.         // 如果标签控件当前选择标签为“graphic”,则隐藏m_regdlg对话框,显示m_gradlg对话框     
  24.     case 1:     
  25.         m_RegDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);     
  26.         m_GraDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);     
  27.         break;     
  28.     default:     
  29.         break;     
  30.     }     
  31.   
  32. }  
0 0