[MFC] 使用Tab控制項

[MFC] 使用Tab控制項

MFC中的TAB控制項不像.NET的這麼好用,拉進來就一個頁籤一個頁籤設定就完成了;而是需要自己去控制每一個頁籤的內容及轉換,所以如果有很多不同的頁,就得自己一個一個去新增。

 

新增頁籤的方式很簡單,先建立參數關聯之後,在OnInitDialog方法中增加子項就可以了。

image

SNAGHTML1443a09

m_Tab.InsertItem(0, _T("頁籤1"));
m_Tab.InsertItem(1, _T("頁籤2"));
m_Tab.InsertItem(2, _T("頁籤3"));

 

接下來就會看到一個有頁籤但是沒內容的tab囉!

SNAGHTML146c93e

 

內容建立的方法就比較麻煩,要透過Dialog來處理,所以先來建立Dialog,並且把他的Border設為NoneStyle設定為Child,然後放上我們需要的控制項:

image

 

接下來回到主Dialog,在標頭檔新增頁籤要用欄位,我們就可以利用這個來處理Tab的內容頁;回到剛才新增頁籤的地方,增加相關設定:

image

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;
	}
}

這樣就加進去啦!

image

 

不過通常Tab都沒用得這麼簡單,如果接下來要再處理,就把那些頁籤視做一般的Dialog了,所以要先新增相關的類別才可以操作。

image

SNAGHTML15c3421

 

如果想要從Tab的頁籤中取得外層的資料,有幾個方法:

1. 如果只有一個Dialog:

 

2.從父親的控制項找:

 

 

相關連結:

在MFC中使用Tab Control

 

 

Dotblogs 的標籤: ,