原文地址:http://blog.csdn.net/franzhong/article/details/6304968
http://snowcoal.com/article/446.html
这个Tab控件确实封装的太不敢恭维,要写一堆代码才是实现一个简单的tab样式,此版文章只为最初级的入门级菜鸟,鉴于网上好多代码都是easy said than done。
个人总结出来三点,抛开所有东西,说到底实现tab控件总共分三步:(界面,初始化,控制)
环境关键词: VC6.0 MFC 对话框
一:拼凑界面:
新建好对话框工程后把上面的确定啦之类的点中Delete掉
添加Tab 把这个Tab的ID改为IDC_TAB 右健ClassWized(类向导)里在变量那里为IDC_TAB添加一个变量(从CTabCtrl)
在资源里新建对话框属性改一下:样式是下层,边框是无(看好啊)(当前的对话框的ID为IDD_DIALOG1)
在上面再加个字吧(静态变量)例如第一页(别放在最顶上,怕把后面小标题挡住了,字放中间吧)
直接拖这个对话框IDD_DIALOG1复制一份(你一拖就看到了小加号松手就行)这个名字自动是IDD_DIALOG2
把里面的静态量改了例如第二页。
第一步完成了,下面我们来初始化
二:初始化参数:
在主对话框类里右键添加变量,CDlgPar1 m_para1;CDlgPar2 m_para2;这是你刚生成的两个对话框类,这里实例一下呆会用//这不会得可以查一下如何添变量的
的OnInitDialog中加入如下代码:
1
2
|
m_tab.InsertItem(0,
"num1"
);
m_tab.InsertItem(1,
"num2"
);
|
还记得m_tab是什么不,就是刚添的tab控件,我们给它插入元素啦,当然你也可以多加几项
现在就你可以测试一下了,小样子是不是出来了,就是没有定义的两个对话框的内容
接着添加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//把第一个对话框IDD_DIALOG1给映射到那个TAB上去,鬼知道做了什么事
m_para1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB));
m_para2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB));
CRect rs;
//这要个矩行区域了,因为你要是IDD_DIALOG1太大太小太长太短,放里面也不合适啊
m_tab.GetClientRect(&rs);
rs.top += 10;
//你的tab用于点击的小图标在上面的时候把这个就加大点50吧,我是在放在下面的
rs.bottom -=50;
//这里的数字你改改看,小心别挡着东西就行
rs.left +=10;
rs.right -=10;
m_para1.MoveWindow(&rs);
m_para2.MoveWindow(&rs);
//到这儿两个对话框框口都移过来了,就先默认的显示一个吧
m_para1.ShowWindow(TRUE);
//就是你了
m_para2.ShowWindow(FALSE);
m_tab.SetCurSel(0);
//因为以上是在OnInitDialog中所以运行时,对话框会被以上代码初始化一次
|
第二步结束,你可以运行看一下了,没有数据的话,你看看是不是丢了哪一步,有数据了就下一步
三:设置控制逻辑
还是右键那个Tab进入类查看,在message maps里object ID有你刚定义的IDC_TAB,往右边看里面是不是有个小名叫TCN_SELCHANGE的添加它后点edit
加入如下代码,加代码后是这样的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
void
CTestTabDlg::OnSelchangeTab(NMHDR* pNMHDR,
LRESULT
* pResult)
{
// TODO: Add your control notification handler code here
int
Cursel = m_tab.GetCurSel();
switch
(Cursel)
{
case
0:
//这里的0,1你刚在OnInitDialog中设定
m_para1.ShowWindow(TRUE);
m_para2.ShowWindow(FALSE);
break
;
case
1:
m_para1.ShowWindow(FALSE);
//
m_para2.ShowWindow(TRUE);
break
;
default
:
break
;
}
*pResult = 0;
}
|
三步完成,总结一下,这些事确实多,但是我想省掉些东西的时候发现还就不正常了,慢慢了解吧,先知道怎么用就行