MFC tab控件的使用 使用起来真的很麻烦

注意:

使用tab控件要为每一个tab页面设置子页面,而且切换页面也要自己编写函数!

大小设置也需要注意,不然会挡住tab控件的切换按钮!

1.tab控件创建

1.1 将tab控件拖拽到Dialog上

1.2 设置控件名字IDC_TAB,并创建成员变量m_tab

2.创建子页面

2.1 添加新Dialog,作为tab子页面

2.2 为子页面设置属性

3.主页面添加代码

3.1 在主Dialog的头文件中声明这些子页面的实例

3.2 为主Dialog添加WM_INITDIALOG消息事件,添加代码

 1 BOOL 主要Dlg::OnInitDialog() 
 2 {
 3     CDialog::OnInitDialog();
 4     
 5     // TODO: Add extra initialization here
 6 
 7     //设置tab页面的标题
 8     m_tab.InsertItem(0,_T("页面1")); 
 9     m_tab.InsertItem(1,_T("页面2")); 
10     
11     //为tab子页面绑定子窗口空间
12     //无边框的子窗口(要先去创建过实例).Create(子窗口空间,GetDlgItem(父窗口tab空间))
13     page1.Create(IDD_PAGE1,GetDlgItem(IDC_Var_TAB));
14     page2.Create(IDD_PAGE2,GetDlgItem(IDC_Var_TAB));
15 
16     //子窗口大小设置,不设置的话会把tab标题给覆盖掉
17     CRect rect;
18     m_tab.GetClientRect(rect);
19     rect.InflateRect(-1,-30,-2,-2);
20     page1.MoveWindow(&rect);     //每一个子窗口大小都要设置
21     page2.MoveWindow(&rect);
22 
23     //初始状态显示第一个tab页面
24     page1.ShowWindow(SW_SHOW);
25     
26     return TRUE;  // return TRUE unless you set the focus to a control
27                   // EXCEPTION: OCX Property Pages should return FALSE
28 }

3.3 为tab控件添加TCN_SELCHANGE消息,添加代码

 1 void CSyssetDlg::OnSelchangeVarTAB(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:
 9         page1.ShowWindow(SW_SHOW);  
10         page2.ShowWindow(SW_HIDE);  
11         break;  
12     case 1:
13         page1.ShowWindow(SW_HIDE);  
14         page2.ShowWindow(SW_SHOW);
15     }
16     *pResult = 0;
17 }

其他参考:

http://blog.csdn.net/keepaction/article/details/7377195

http://www.cnblogs.com/lzmfywz/archive/2012/04/07/2436571.html

原文地址:https://www.cnblogs.com/jun14/p/2751293.html