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

2016-02-19 14:27 10 1 收藏

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

【 tulaoshi.com - 编程语言 】

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

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

  主要思路如下:

  做一个类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());即可

  另附类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;
  }
  
  ///////////////////////////////////////////////////////////

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

  //将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://www.tulaoshi.com/n/20160219/1606994.html

延伸阅读
《巫师2》游戏时频繁跳出问题解决办法 首先,跳出目前已知情况分两种(自己系统必备游戏软件没装全的不算): 第一种: 配置较高玩家,机器可承受起高效果但不时会跳出。若调到较低效果则没有此问题。 这种情况只会在32位系统下出现,因为巫师2最高效果处理时单进程内存占有率会超2GB,之所以不时跳出是因为32位系统单进程内存占...
win7系统待机断网问题解决办法   1、按组合键win+R打开运行窗口,接着输入regedit,回车确认,如下图所示: 2、打开注册表编辑器后,依次展开HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerPower,然后在右边窗格空白处单击鼠标右键,新建一个DWORD(32-位)值,将其命名为AwayModeEnabled,如下图所示: ...
标签: 软件教程
在使用路由器的过程中,大家应该都遇到过不少各式各样的路由器网络设置问题。如可以上QQ、旺旺却浏览不了网页?电脑能拨号上网,换了路由器或另外一台电脑却拨不上?路由优化大师教你如何搞定。 网络可以上QQ、旺旺等聊天工具,但却访问不了网页,这种情况一般是DNS出了问题。通常有三种可能性,一种是网络设...
标签: windows系统
Win8宽带连接不能保存密码问题解决办法   Windows8宽带自动链接拨号时每次都要输入密码,让人非常的不爽,怎么办呢? 方法如下: 1、建立文本 2、输入:RASDIAL 宽带连接 用户名 密码 3、保持为 bat 格式:"宽带连接.BAT" 即可 点击宽带连接.BAT 就可以自动拨号了,方法处理 windows slate 系统...
91助手无法导入短信、通讯录问题解决办法   91助手是手机用户用得较多的一款手机同步管理软件,但是不少朋友最近出现了91助手无法导入短信、通讯录、联系人等类似问题,这个要怎么解决呢 无法导入问题描述: 用91手机助手连接手机后,无法读取手机中的通讯录和短信,不显示数量,点进去之后是空的,自然也不能在电脑上通...

经验教程

974

收藏

43
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部