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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 跨域問題解決辦法跨域
- IOS下圖片不能顯示問題的解決辦法iOS
- 在IDEA下使用JUnit出現的問題與解決辦法Idea
- svn相關問題解決辦法
- Xcode9.x 總是轉菊花、卡死問題的解決辦法XCode
- Python 命令跳轉微軟應用商店問題解決辦法Python微軟
- Python專案,VS Code控制檯輸出亂碼問題解決辦法Python
- Xshell連線Linux慢問題解決辦法Linux
- Macbook Pro Big Sur出問題解決辦法Mac
- 前端inline元素間隙問題解決辦法前端inline
- css的position-relative相容問題與解決辦法CSS
- Authentication failure 以及xxx is not in the sudoers file 問題的解決辦法AI
- [轉帖]使用NMT和pmap解決JVM資源洩漏問題原創JVM
- 【Salesforce問題解決】Dataloader匯出的檔案亂碼或者問號的解決辦法Salesforce
- 位運算解決多標籤問題【原創】
- Vue 下 ESLint 的 error 解決辦法VueEsLintError
- matlab編譯exe問題具體解決辦法Matlab編譯
- 你遇到過的相容性問題以及解決辦法
- npm install realm --save失敗的問題與解決辦法NPM
- libigl庫的學習筆記--問題與解決辦法筆記
- 幾種解決“藍芽不可用”問題的辦法藍芽
- ORA-04031的傻瓜解決辦法(轉)
- 【原創】視訊+文字:詳解VBA解決數獨問題
- 資料併發操作帶的的問題及解決辦法
- tomcat8.5+ windows中html頁面及控制檯中文亂碼問題解決辦法TomcatWindowsHTML
- github訪問受限解決辦法Github
- PHP Warning: exec() has been disabled for security 問題解決辦法PHP
- command 'gcc' failed with exit status 1錯誤問題的解決辦法GCAI
- WSL中配置EDA環境:遇到的問題以及解決辦法
- Jekyll 本地除錯部落格遇到的問題及解決辦法除錯
- docker網路問題解決辦法“大全”:關於宿主機訪問不了docker容器中web服務,或者容器內訪問不了外網的問題的解決辦法DockerWeb
- 【轉】vue mounted 呼叫兩次的解決辦法Vue
- Windows無法配置此無線連線這個問題的解決辦法Windows
- 創造性解決arch/manjaro官方aur源下載慢辦法JAR
- Oracle 解決like中無法匹配下劃線的問題Oracle
- 解決Spring Boot無法跳轉jsp頁面問題Spring BootJS
- 解決無法使用VI的問題
- wordress小程式圖片訪問出現404問題解決辦法
- Laradock 下建立 storage:link 軟連線資源無法訪問的解決辦法