现在的位置: 首页 > 综合 > 正文

MFC中Tab控件的使用详解

2013年01月31日 ⁄ 综合 ⁄ 共 3818字 ⁄ 字号 评论关闭

TAB控件必须和子对话框相结合,才能进行使用。

1.首先创建一个对话框应用程序。

2.在该对话框上放置Tab控件,并添加Control变量为m_tab。

3.再插入一个Dialog,设ID值为IDD_CH1。并设置属性,“样式”为“下层”(“Style”为“Child”),“边框”为“无”(Border为None)。

4.在父对话框中添加WM_INITDIALOG消息,函数为OnInitDialog。在此函数中添加如下代码:

  1. m_tab.InsertItem(0,_T("登记入库"),0);   
  2.   
  3. ch1.Create(IDD_CH1,GetDlgItem(IDC_TAB1));  
  4.   
  5. CRect rect;  
  6.   
  7. m_tab.GetClientRect(&rect);   
  8.   
  9. rect.top+=40;  
  10.   
  11. rect.bottom-=10;   
  12.   
  13. rect.left+=10;   
  14.   
  15. rect.right-=10;   
  16.   
  17. ch1.MoveWindow(&rect);   
  18.   
  19. ch1.ShowWindow(SW_SHOW);  

如果要让TAB随着点击显示不同的子Dialog,那么为TAB添加TCN_SELCHANGE消息。

代码为:
  1. void CStoreMan::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)   
  2. {  
  3.     // TODO: Add your control notification handler code here
      
  4.     //当点击了Tab的按钮   
  5.     int num=m_tab.GetCurSel();  
  6.     switch(num)  
  7.     {  
  8.     case 0:ch1.ShowWindow(SW_SHOW);  
  9.            ch2.ShowWindow(SW_HIDE);  
  10.            break;  
  11.     case 1:ch1.ShowWindow(SW_HIDE);  
  12.            ch2.ShowWindow(SW_SHOW);  
  13.     }  
  14.     *pResult = 0; 
    //----------------------------------------------------------------------

 

 

1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 

2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl. 

3. 在对话框的初始化函数OnInitDialog里面添加如下代码: 
clip_image001m_tab.InsertItem(0,"参数一"); 
//添加参数一选项卡 
clip_image001[1]m_tab.InsertItem(1,"参数二"); 
//添加参数二选项卡 
clip_image001[2]m_tab.InsertItem(2,"结果");   
//添加结果选项卡

4.在对话框资源里面添加三个对话框资源, ID分别命名为IDD_PARA1, IDD_PARA2, IDD_RESULT. 字体为宋体, 字号为9, style为Child, Border为None, 宽度调整为161. 再分别为其添加对应的基于CDialog类CPara1, CPara2, CResult. 

5. 在CMyTabDlg类中添加三个成员变量m_para1, m_para2, m_result, 分别是三个子对话框的实例. 代码如下:

clip_image001[3]CResult
m_result; 
clip_image001[4]CPara2
m_para2; 
clip_image001[5]CPara1
m_para1; 

6. 在IDD_PARA1对话框上添加静态文本控件内容为"参数一" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nPara1; 

在IDD_PARA2对话框上添加静态文本控件内容为"参数二" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nPara2; 

在IDD_RESULT对话框上添加静态文本控件内容为"结果" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nResult; 

7. 为CPara1类添加成员函数int GetParaValue() 代码如下: 
clip_image001[6]int
CPara1::GetParaValue() 
clip_image002clip_image003...{ 
clip_image004 return
m_nPara1; 
clip_image005

为CPara2类添加成员函数int GetParaValue() 代码如下: 
clip_image001[7]int
CPara2::GetParaValue() 
clip_image002[1]clip_image003[1]...{ 
clip_image004[1] return
m_nPara2; 
clip_image005[1]

为CResult类添加成员函数void SetResultValue(int nResult) 代码如下: 
clip_image001[8]void
CResult::SetResultValue(int nResult) 
clip_image002[2]clip_image003[2]...{ 
clip_image004[2]    
m_nResult = nResult; 
clip_image005[2]

8. 在IDD_MYTAB_DIALOG对话框的初始化函数OnInitDialog里面添加如下代码: 
clip_image001[9]//关联对话框,并且将IDC_TABTEST控件设为父窗口 
clip_image001[10]m_para1.Create(IDD_PARA1,GetDlgItem(IDC_TABTEST)); 
clip_image001[11]m_para2.Create(IDD_PARA2,GetDlgItem(IDC_TABTEST)); 
clip_image001[12]m_result.Create(IDD_RESULT,GetDlgItem(IDC_TABTEST)); 
clip_image001[13] 
clip_image001[14]//获得IDC_TABTEST客户区大小 
clip_image001[15]CRect
rs; 
clip_image001[16]m_tab.GetClientRect(&rs); 
clip_image001[17]//调整子对话框在父窗口中的位置 
clip_image001[18]rs.top+=1; 
clip_image001[19]rs.bottom-=60; 
clip_image001[20]rs.left+=1; 
clip_image001[21]rs.right-=2; 
clip_image001[22] 
clip_image001[23]//设置子对话框尺寸并移动到指定位置 
clip_image001[24]m_para1.MoveWindow(&rs); 
clip_image001[25]m_para2.MoveWindow(&rs); 
clip_image001[26]m_result.MoveWindow(&rs); 
clip_image001[27] 
clip_image001[28]//分别设置隐藏和显示 
clip_image001[29]m_para1.ShowWindow(true); 
clip_image001[30]m_para2.ShowWindow(false); 
clip_image001[31]m_result.ShowWindow(false); 
clip_image001[32] 
clip_image001[33]//设置默认的选项卡 
clip_image001[34]m_tab.SetCurSel(0);

9. 添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,函数体代码如下:

clip_image001[35]int
CurSel = m_tab.GetCurSel(); 
clip_image001[36] switch(CurSel) 
clip_image002[3]clip_image003[3] ...{ 
clip_image004[3] case
0: 
clip_image004[4]        
m_para1.ShowWindow(true); 
clip_image004[5]        
m_para2.ShowWindow(false); 
clip_image004[6]        
m_result.ShowWindow(false); 
clip_image004[7] break; 
clip_image004[8] case
1: 
clip_image004[9]        
m_para1.ShowWindow(false); 
clip_image004[10]        
m_para2.ShowWindow(true); 
clip_image004[11]        
m_result.ShowWindow(false); 
clip_image004[12] break; 
clip_image004[13] case
2: 
clip_image004[14]        
m_para1.ShowWindow(false); 
clip_image004[15]        
m_para2.ShowWindow(false); 
clip_image004[16]        
m_result.ShowWindow(true); 
clip_image004[17] break; 
clip_image004[18] default: 
clip_image004[19]        

clip_image005[3]    
}     
clip_image001[37] 
clip_image001[38]   
*pResult = 0;

10. 在IDD_MYTAB_DIALOG对话框下面添加一个按钮, 标题为"计算" 为其添加事件响应函数, 代码如下:

clip_image001[39]m_para1.UpdateData(true); 
clip_image001[40]    
m_para2.UpdateData(true); 
clip_image001[41]    
m_result.SetResultValue(m_para1.GetParaValue()+m_para2.GetParaValue()); 
clip_image001[42]    
m_result.UpdateData(false);   

11. 最后演示结果如下:

clip_image007

clip_image009

clip_image010

12. 这个小程序很简单,但是他说明了Tab Control控件的基本用法.

抱歉!评论已关闭.