| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> vc >> VC实例 >> 文章正文
VC下TabCtrl的控制问题解决办法        【字体:
VC下TabCtrl的控制问题解决办法
作者:-    文章来源:-    点击数:    更新时间:2006-4-20

做作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());即可

   另附类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:
   typedefCListCIntList;
   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(nTabs>0&&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(nTab
   m_pIDGroups[nTab].AddTail(nID);
   returnTRUE;
   }

   /////////////////////////////////////////////////////////////
   //删除指定的id
   BOOLCTabContainer::Delete(intnTab,intnID)
   {
   ASSERT(nTab
   m_pIDGroups[nTab].RemoveAt(m_pIDGroups[nTab].Find(nID));
   returnTRUE;

[1] [2] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • Windows网络编程经典入门

  • 制作自动循环播放的MP3播放器…

  • ping的源程序

  • 制作自动循环播放的MP3播放器…

  • 明明白白看MFC之程序框架(一…

  • 使用GDI在内存中转换图片类型

  • 扩展MFC类库建立自己的界面类…

  • 在BMP文件中隐藏信息(一)

  • VC下ADO开发实践之一

  • 明明白白看MFC之程序框架(二…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |