VC下TabCtrl的控制問題解決辦法( 原創 ) (轉)
做作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
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
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////////
//刪除指定的id
BOOL CTabContainer::Delete(int nTab,int nID)
{
ASSERT(nTab
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////////
//當前顯示哪個tab
void CTabContainer::Show(int nTab)
{
ASSERT(nTab
POSITION nPos=0;
for(int i=0;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_H);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////
//釋放記憶體和清理工作
void CTabContainer::Clear(void)
{
if(m_pIDGroups!=NULL)
{
delete []m_pIDGroups;
m_pIDGroups=NULL;
m_nLCount=0;
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-985642/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 研究心得------->Seskin控制元件包中SeskinEdit漢字問題的解決辦法 (轉)控制元件
- 跨域問題解決辦法跨域
- 解決VC中增加類檔案的問題 (轉)
- IOS下圖片不能顯示問題的解決辦法iOS
- HTC Vive遇到的問題解決辦法
- veritas netbackup的問題解決辦法
- svn相關問題解決辦法
- RedHat9的service named stop問題及解決辦法(轉)Redhat
- oracle rac asm 問題的官方解決辦法OracleASM
- 回溯法解決喝酒問題 (轉)
- 怎麼解決內容的原創性問題
- 在IDEA下使用JUnit出現的問題與解決辦法Idea
- 【Ubuntu】unknown host問題解決辦法Ubuntu
- 虛擬化問題及解決辦法
- oracle壞塊問題及解決辦法Oracle
- 【原創】autotrace中statistics為0的問題的解決
- [原創]解決了一個另類的輸入法不起作用的問題
- Python 命令跳轉微軟應用商店問題解決辦法Python微軟
- 在linux字型下的顯示問題及幾種解決辦法Linux
- 【原創】ORA-02085問題的解決
- Xcode9.x 總是轉菊花、卡死問題的解決辦法XCode
- 解決不能透過mysql.sock連線MySQL問題的辦法(轉)MySql
- nginx部署後常見問題解決辦法Nginx
- jive 漢字問題終極解決辦法
- 遠端桌面不能全屏問題解決辦法
- 忘記weblogic控制檯密碼解決辦法 轉Web密碼
- Python專案,VS Code控制檯輸出亂碼問題解決辦法Python
- 位運算解決多標籤問題【原創】
- [原創]Gerrit中文亂碼問題解決方案分享
- 最近遇到的問題和解決辦法
- jQuery.getJSON的快取問題的解決辦法jQueryJSON快取
- [轉帖]使用NMT和pmap解決JVM資源洩漏問題原創JVM
- 【原創】視訊+文字:詳解VBA解決數獨問題
- 無法訪問google picasa的解決辦法Go
- Macbook Pro Big Sur出問題解決辦法Mac
- Vmware vSphere常見問題及解決辦法
- VC++6.0的相容性問題解決方案C++
- VC6.0的相容性問題解決方案