]MFC Tab控件最简单的实现(还能不能再简单一点!)

原文地址: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;
}


三步完成,总结一下,这些事确实多,但是我想省掉些东西的时候发现还就不正常了,慢慢了解吧,先知道怎么用就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值