MFC tab

说起这个控件,我还真的没有在我的工程中用过,不过我的同事用的比较多,后来我的一个知心朋友问起我这个控件的具体用法,于是我从头到尾看了一下这个控件,下面我把这个控件的具体用法给大家说一下,用这个控件的好处是,可以减少程序的排放空间,让用户操作也是很方便的,一幕了然,如下图所示,

  怎样用好这个控件呢! 下面我来说一下

  步骤一:建一个MFC的向导,工程类型为基本的对话框,取名为MyTest

  步骤二:对话框中放入一个Tabcontrol控件,关联一个变量,取名为m_tab1,在插入2个资源对话框

  如下图

  分别设置对话框的属性为 style为child(目的为了使自己能嵌入到其他的控件中,后面有说明),border:设置为none(这个就是为了好看,不信得话你可以不设置这个属性),去掉Title Bar 这个选项,

  如下图

  步骤三:分别为这2个对话框,关联一个类,类名分别为CDlg1, CDlg2,在这2个对话框中分别放个按钮或者文本之类的东西,

  步骤四:回到MyTestDlg类中,添加2个成员变量,分别是2个对话框的成员变量,即:CDlg m_Dlg1;和CDlg2 m_Dlg2; 并且在CPP文件中添加#include "Dlg2.h" 和#include "Dlg1h" (目的就是为了能声明2个对话框类的变量,不然的话会出现编译错误),

  步骤五:在MyTestDlg类中初始化OnInitDialog()函数中添加如下函数

  m_tab.InsertItem(0,"test1"); //往Tabcontrol中添加一个标签页,标签的名字是test1,注意这里是从0开始的

  m_tab.InsertItem(1,"test2");//往Tabcontrol中添加另一个标签页,标签的名字是test2

  m_Dlg1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1));//创建Dlg1对话框,并且把这个对话框附加到Tabcontrol中

  m_Dlg2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB1));//创建Dlg2对话框,并且把这个对话框附加到Tabcontrol中

  CRect rect;

  m_tab.GetClientRect(&rect); //获得Tabcontrol控件的大小,为了使对话框能嵌入到里面,是程序看起来美观大方

  m_Dlg1.SetWindowPos(NULL,10, 30,rect.right - 20,rect.bottom -40,SWP_SHOWWINDOW);//这个函数的目的就是改变对话框的大小来适合TabCtrol控件的大小,并且在TabCtrol控件中首先显示Dlg1的页面,

  步骤六:当然了,当你点击Tabcontrol控件标签页的时候会触发OnSelchange消息,如果不重载这个消息的时候,对话框就会只显示Dlg1,而不显示Dlg2,页面也不会切换,我在刻意在这个消息映射函数中添加我们自己的处理过程

  如下

  void CRtDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)

  {

  // TODO: Add your control notification handler code here

  int nCurSel=m_tab.GetCurSel();//获得用户选择了那个标签页

  CRect rect;

  m_tab.GetClientRect(&rect); //得到Tabcontrol控件的大小,为后面显示Dlg1和Dlg2的位置和大小

  switch(nCurSel)

  {

  case 0: //当用户选择标签0的时候(标签是以0为索引的),显示Dlg1,隐藏Dlg2

  {

  m_Dlg1.SetWindowPos(NULL,10, 30,rect.right - 20,rect.bottom -40,SWP_SHOWWINDOW);

  m_Dlg2.SetWindowPos(NULL,10, 30,rect.right - 20,rect.bottom -40,SWP_HIDEWINDOW);

  }

  break;

  case 1: //当用户选择标签1的时候(标签是以0为索引的),显示Dlg2,隐藏Dlg1

  m_Dlg2.SetWindowPos(NULL,10, 30,rect.right - 20,rect.bottom -40,SWP_SHOWWINDOW);

  m_Dlg1.SetWindowPos(NULL,10, 30,rect.right - 20,rect.bottom -40,SWP_HIDEWINDOW);

  break;

  }

  *pResult = 0;

  }

  程序界面如下图

  到此基本的功能已经说完了,如果你想添加控件可以直接添加到2个对话框中就可以了,其实我们还可以添加一个功能,具体过程你可以看一下MSDN的Tabcontrol控件的成员方法,可以自己举一反三,比如说在控件的标签上添加图片之类的,都需要读者去开发,去创新,

  备注:其实他们的用法都遵循一个过程,这个过程需要你去记忆,只有你记住了,你才能去创新,不然的话你闭门造车是行不通的,它就像操作文件一样,首先打开文件,写文件,然后才是关闭文件,这样的顺序是不能颠倒的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值