动态添加Tab控件

TabCtrl控件可以通过对话框方式直接采用控件静态添加,但是有时候需要去动态创建一个TabCtrl控件,本文是在CFormView上动态创建TabCtrl控件:

一、Tab控件的动态添加

1、添加CTabCtrl类的对象:

[cpp]  view plain copy
  1. CTabCtrl m_tabCtrl;  
2、在资源视图中为m_tabCtrl设置资源ID:

方法:右键资源,选择Resource Symbols,然后弹出资源ID对话框,添加CTabCtrl资源ID号:IDC_TABCTRL;

3、WM_CREATE消息响应,在OnCreate(...)函数中添加如下代码:

[cpp]  view plain copy
  1. //得到窗口的大小  
  2. CRect rec;  
  3. GetClientRect(&rec);  

  4. //创建tabCtrl控件  
  5. m_tabCtrl.Create(TCS_TABS|WS_CHILD|WS_VISIBLE,rec,this,IDC_TABCTRL);  
  6. //添加控件按钮名称  
  7. m_tabCtrl.InsertItem(0,"车辆信息列表");  
  8. m_tabCtrl.InsertItem(1,"地图列表");  



二、tab控件关联的对话框的添加(手动吧,方便点)

4、为TabCtrl控件添加页面,手动新建两个对话框,IDD默认,属性child&&none,右键得到自动化模板,分别新建相应的类CDialog1和CDialog2

然后在cpp中新建相应的两个对象(后面要用,用来和各个tab页相关联)

代码:

CDialog1 m_page1;

CDialog2 m_page2;

5.和各个tab页相关联,WM_CREATE消息响应,在OnCreate(...)函数中添加如下代码:

  1. //对话框页面  
  2. m_page1.Create(IDD_DIALOG1,GetDlgItem(IDC_TABCTRL));  
  3. m_page2.Create(IDD_DIALOG2,GetDlgItem(IDC_TABCTRL));  

三、Tab页面的初始化

6、初始化tab页面,接着在OnCreate(...)函数中添加如下代码:

  1. //显示第一个页面  
  2. m_page1.ShowWindow(SW_SHOW);  
  3. //设置tab控件为:选中的是第一个页面  
  4. m_tabCtrl.SetCurSel(0);  


四、Tab控件、关联的对话框,的布局美化

7、WM_SIZE消息响应,该函数是为了使得页面布局和FormView页面大小相同,不然会出现空闲部分,显得布局很不美观,在对应的函数(ON_SIZE消息的响应函数onsize()中)中添加如下代码:

[cpp]  view plain copy
  1. m_tabCtrl.MoveWindow(0,0,cx,cy);  
  2. m_page1.MoveWindow(0,25,cx,cy);  
  3. m_page2.MoveWindow(0,25,cx,cy);  



五、Tab控件的使用(页面切换函数)

8、tab控件的页面切换消息:TabCtrl控件TCN_SELCHANGE消息响应,这里并没有静态的TabCtrl控件,所以需要动态添加,方法如下:

1)在CFormView的cpp文件中的BEGIN_MESSAGE_MAP......END_MESSAGE_MAP()之间加入:ON_NOTIFY(TCN_SELCHANGE,IDC_TABCTRL,OnSelChangeTab)

2)在在CFormView的h文件中的{{AFX_MSG(CFormViewDown).....//}}AFX_MSG之间加入:

afx_msg void OnSelChangeTab(NMHDR *pNMHDR,LRESULT *pResult);

3)实现OnSelChangeTab(NMHDR *pNMHDR,LRESULT *pResult)

[cpp]  view plain copy
  1. void CFormViewDown::OnSelChangeTab(NMHDR *pNMHDR,LRESULT *pResult)  
  2. {  
  3.     //获取所选择的页面  
  4.     int nCurSel = m_tabCtrl.GetCurSel();  
  5.     if(nCurSel == 0)  
  6.     {     
  7.         //页面一显示,页面二隐藏  
  8.         m_page1.ShowWindow(SW_SHOW);  
  9.         m_page2.ShowWindow(SW_HIDE);  
  10.     }  
  11.     else if(nCurSel == 1)  
  12.     {     
  13.         ////页面二显示,页面一隐藏  
  14.         m_page1.ShowWindow(SW_SHOW);  
  15.         m_page2.ShowWindow(SW_HIDE);  
  16.     }  
  17.     *pResult = 0;  
  18. }  

你可能感兴趣的:(动态添加Tab控件)