分享
 
 
 

VC下TabCtrl的控制问题解决办法( 原创 )

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

做作vc界面的都知道,如果在遇到多个控件用tabctrl分组显示时是一件很繁琐的事情,同时代码量也特别的大

。下面是我今天下午刚刚想出的一个自己认为满意的解决办法。

主要思路如下:

做一个类CTabContainer,在初始化的时候确定将控件id分成几组(也就是几个tab 标签),然后为每一组做一个

链表分别保存每一个tab下属的控件id集。这样的话,只需在对话框初始化时做好一个基本的设定,然后在OnSe

lchangeTab1写上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的源代码:

class CTabContainer

{

public:

CTabContainer();

virtual ~CTabContainer();

CTabContainer(const CTabContainer & tabContainer);

const CTabContainer & operator =(const CTabContainer & tabContainer);

BOOL Init(int nTabs,CWnd * pParent);

//初始化tab,nTabs代表有几个按扭

BOOL AddCtrlId(int nTab,int nID);//将id添加到哪个tab中

BOOL Delete(int nTab,int nID);//删除id

void Show(int nTab);//当前显示哪个tab

void Clear(void);//释放内存和清理工作

protected:

typedef CList<int,int&> CIntList;

CIntList * m_pIDGroups; //指向链表的指针

int m_nLCount;//链表的个数

CWnd * m_pParent;//父窗体指针

};

///////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////

//构造函数

CTabContainer::CTabContainer()

{

m_pParent=NULL;

m_pIDGroups=NULL;

m_nLCount=0;

}

/////////////////////////////////////////////////////////////////////////////////////

//虚拟析构函数

CTabContainer::~CTabContainer()

{

Clear();

}

/////////////////////////////////////////////////////////////////////////////////////

//拷贝构造函数

CTabContainer::CTabContainer(const CTabContainer & tabContainer)

{

//待实现

Clear();

}

/////////////////////////////////////////////////////////////////////////////////////

//重载赋值运算符

const CTabContainer & CTabContainer::operator =(const CTabContainer & tabContainer)

{

//待实现

return *this;

}

/////////////////////////////////////////////////////////////////////////////////////

//初始化tab,nTabs代表有几个按扭

BOOL CTabContainer::Init(int nTabs,CWnd * pParent)

{

ASSERT(nTabs>0 && pParent!=NULL);

Clear();

m_nLCount=nTabs;

m_pParent=pParent;

m_pIDGroups=new CIntList[nTabs];

ASSERT(m_pIDGroups!=NULL);

return TRUE;

}

/////////////////////////////////////////////////////////////////////////////////////

//将id添加到哪个tab中

BOOL CTabContainer::AddCtrlId(int nTab,int nID)

{

ASSERT(nTab<m_nLCount);

m_pIDGroups[nTab].AddTail(nID);

return TRUE;

}

/////////////////////////////////////////////////////////////////////////////////////

//删除指定的id

BOOL CTabContainer::Delete(int nTab,int nID)

{

ASSERT(nTab<m_nLCount);

m_pIDGroups[nTab].RemoveAt(m_pIDGroups[nTab].Find(nID));

return TRUE;

}

/////////////////////////////////////////////////////////////////////////////////////

//当前显示哪个tab

void CTabContainer::Show(int nTab)

{

ASSERT(nTab<m_nLCount);

int nID=0;

POSITION nPos=0;

for(int i=0;i<m_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);

}

}

}

/////////////////////////////////////////////////////////////////////////////////////

//释放内存和清理工作

void CTabContainer::Clear(void)

{

if(m_pIDGroups!=NULL)

{

delete []m_pIDGroups;

m_pIDGroups=NULL;

m_nLCount=0;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有