VC下TabCtrl的控制问题解决办法

life煞神

life煞神

2016-02-19 14:27

下面是个简单易学的VC下TabCtrl的控制问题解决办法教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

  做作vc界面的都知道,如果在遇到多个控件用tabctrl分组显示时是一件很繁琐的事情,同时代码量也特别的大下面是我今天下午刚刚想出的一个自己认为满意的解决办法。

  主要思路如下:

  做一个类CTabContainer,在初始化的时候确定将控件id分成几组(也就是几个tab标签),然后为每一组做一个链表分别保存每一个tab下属的控件id集。这样的话,只需在对话框初始化时做好一个基本的设定,然后在OnSelchangeTab1写上m_pTabContainer-Show(m_tab.GetCurSel());就可以了。
  
  类的使用方法:
  
  在OnInitDialog()里面
  m_pTabContainer-Init(3,this);//3个tab标签按钮,this对话框指针。
  m_pTabContainer-AddCtrlId(0,IDC_BUTTON1);//IDC_BUTTON1加到第一组tab当中
  m_pTabContainer-AddCtrlId(0,IDC_BUTTON4);//下面类似
  m_pTabContainer-AddCtrlId(0,IDC_BUTTON5);
  m_pTabContainer-AddCtrlId(1,IDC_BUTTON2);
  m_pTabContainer-AddCtrlId(1,IDC_BUTTON6);
  m_pTabContainer-AddCtrlId(2,IDC_BUTTON3);
  m_pTabContainer-AddCtrlId(2,IDC_BUTTON7);
  m_pTabContainer-AddCtrlId(2,IDC_BUTTON8);
  m_pTabContainer-Show(0);//默认显示第一个标签下面的控件
    
  在控件TAb的事件OnSelchangeTab1
  m_pTabContainer-Show(m_tab.GetCurSel());即可

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  另附类CTabContainer的源代码:
  classCTabContainer
  {
  public:
  CTabContainer();
  virtual~CTabContainer();
  CTabContainer(constCTabContainer&tabContainer);
  constCTabContainer&operator=(constCTabContainer&tabContainer);
  
  BOOLInit(intnTabs,CWnd*pParent);
  
  //初始化tab,nTabs代表有几个按扭
  BOOLAddCtrlId(intnTab,intnID);//将id添加到哪个tab中
  BOOLDelete(intnTab,intnID);//删除id
  voidShow(intnTab);//当前显示哪个tab
  voidClear(void);//释放内存和清理工作
  
  protected:
  typedefCListINT,INT&CIntList;
  CIntList*m_pIDGroups;//指向链表的指针
  intm_nLCount;//链表的个数
  CWnd*m_pParent;//父窗体指针
  };
    ///////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////
  //构造函数
  CTabContainer::CTabContainer()
  {
  m_pParent=NULL;
  m_pIDGroups=NULL;
  m_nLCount=0;
  
  }
  
  /////////////////////////////////////////////////////////////////
  //虚拟析构函数
  CTabContainer::~CTabContainer()
  {
  Clear();
  
  }
  
  ///////////////////////////////////////////////////////////////
  //拷贝构造函数
  CTabContainer::CTabContainer(constCTabContainer&tabContainer)
  {
  //待实现
  Clear();
  }
  
  //////////////////////////////////////////////////////////////
  //重载赋值运算符
  constCTabContainer&CTabContainer::operator=(constCTabContainer&tabContainer)
  {
  //待实现
  return*this;
  }
  
  /////////////////////////////////////////////////////////////////
  //初始化tab,nTabs代表有几个按扭
  BOOLCTabContainer::Init(intnTabs,CWnd*pParent)
  {
  ASSERT(nTabs0&&pParent!=NULL);
  Clear();
  m_nLCount=nTabs;
  m_pParent=pParent;
  m_pIDGroups=newCIntList[nTabs];
  ASSERT(m_pIDGroups!=NULL);
  
  returnTRUE;
  }
  
  ///////////////////////////////////////////////////////////

  //将id添加到哪个tab中
  BOOLCTabContainer::AddCtrlId(intnTab,intnID)
  {
  ASSERT(nTabM_NLCOUNT);
  m_pIDGroups[nTab].AddTail(nID);
  returnTRUE;
  }
  
  /////////////////////////////////////////////////////////////
  //删除指定的id
  BOOLCTabContainer::Delete(intnTab,intnID)
  {
  ASSERT(nTabM_NLCOUNT);
  m_pIDGroups[nTab].RemoveAt(m_pIDGroups[nTab].Find(nID));
  returnTRUE;
  }
  
  /////////////////////////////////////////////////////////////
  //当前显示哪个tab
  voidCTabContainer::Show(intnTab)
  {
  ASSERT(nTabM_NLCOUNT);
  intnID=0;
  POSITIONnPos=0;
  for(inti=0;iM_NLCOUNT;I++)
  {
  nPos=m_pIDGroups[i].GetHeadPosition();
  while(nPos!=NULL)
  {
  nID=m_pIDGroups[i].GetNext(nPos);
  m_pParent-GetDlgItem(nID)-ShowWindow((i==nTab)?SW_SHOW:SW_HIDE);
  }
  }
  }
  ////////////////////////////////////////////////////////////////////////
  //释放内存和清理工作
  voidCTabContainer::Clear(void)
  {
  if(m_pIDGroups!=NULL)
  {
  delete[]m_pIDGroups;
  m_pIDGroups=NULL;
  m_nLCount=0;
  }
  
  }

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

VC下TabCtrl的控制问题解决办法

编程语言 网络编程
VC下TabCtrl的控制问题解决办法

MSN常见问题解决办法

聊天软件
MSN常见问题解决办法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

访问windows XP共享出现的问题解决办法

windows 操作系统
访问windows XP共享出现的问题解决办法

TSC条码打印机问题解决办法

电脑入门
TSC条码打印机问题解决办法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

关于360流量监控超值问题解决办法

电脑网络
关于360流量监控超值问题解决办法

分享访问Windows xp共享出现的问题解决办法

电脑入门
分享访问Windows xp共享出现的问题解决办法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

硬盘温度多少是正常的?

硬盘温度多少是正常的?

在VC++中播放WAV文件

在VC++中播放WAV文件
下拉加载更多内容 ↓