[MFC] 使用Tab控制項
MFC中的TAB控制項不像.NET的這麼好用,拉進來就一個頁籤一個頁籤設定就完成了;而是需要自己去控制每一個頁籤的內容及轉換,所以如果有很多不同的頁,就得自己一個一個去新增。
新增頁籤的方式很簡單,先建立參數關聯之後,在OnInitDialog方法中增加子項就可以了。
m_Tab.InsertItem(0, _T("頁籤1"));
m_Tab.InsertItem(1, _T("頁籤2"));
m_Tab.InsertItem(2, _T("頁籤3"));
接下來就會看到一個有頁籤但是沒內容的tab囉!
內容建立的方法就比較麻煩,要透過Dialog來處理,所以先來建立Dialog,並且把他的Border設為None、Style設定為Child,然後放上我們需要的控制項:
接下來回到主Dialog,在標頭檔新增頁籤要用欄位,我們就可以利用這個來處理Tab的內容頁;回到剛才新增頁籤的地方,增加相關設定:
m_Tab.InsertItem(0, _T("頁籤1"));
m_Tab.InsertItem(1, _T("頁籤2"));
m_Tab.InsertItem(2, _T("頁籤3"));
// 建立頁籤內容
m_TabPage1.Create(IDD_DIALOG1, &m_Tab);
m_TabPage2.Create(IDD_DIALOG1, &m_Tab);
m_TabPage3.Create(IDD_DIALOG1, &m_Tab);
接下來就要處理頁籤的切換設定:
{
CRect rTab, rItem;
m_Tab.GetItemRect(0, &rItem);
m_Tab.GetClientRect(&rTab);
int x = rItem.left;
int y = rItem.bottom + 1;
int cx = rTab.right - rItem.left - 3;
int cy = rTab.bottom - y -2;
int tab = m_Tab.GetCurSel();
m_TabPage1.SetWindowPos(NULL, x, y, cx, cy, SWP_HIDEWINDOW);
m_TabPage2.SetWindowPos(NULL, x, y, cx, cy, SWP_HIDEWINDOW);
m_TabPage3.SetWindowPos(NULL, x, y, cx, cy, SWP_HIDEWINDOW);
switch(tab)
{
case 0:
m_TabPage1.SetWindowPos(NULL, x, y, cx, cy, SWP_SHOWWINDOW);
break;
case 1:
m_TabPage2.SetWindowPos(NULL, x, y, cx, cy, SWP_SHOWWINDOW);
break;
case 2:
m_TabPage3.SetWindowPos(NULL, x, y, cx, cy, SWP_SHOWWINDOW);
break;
}
}
這樣就加進去啦!
不過通常Tab都沒用得這麼簡單,如果接下來要再處理,就把那些頁籤視做一般的Dialog了,所以要先新增相關的類別才可以操作。
如果想要從Tab的頁籤中取得外層的資料,有幾個方法:
1. 如果只有一個Dialog:
2.從父親的控制項找:
相關連結: