MFC 主對話方塊獲得tab control子對話方塊控制元件的值
1.建立兩個對話方塊程式,用來當做Tab Control控制元件的兩個頁。別忘了把Style改為Child,Border改為None。然後就可以在上面加其他控制元件了。
接著分別為這兩個對話方塊建立兩個類,比如CPage1和CPage2。
然後在對話方塊類標頭檔案中,加入這兩個對話方塊物件。同時增加一個變數int m_CurSelTab,用了表明是哪個Page即將被切換。
int m_CurSelTab;
CPage1 m_page1;
CPage2 m_page2;
CDialog* pDialog[2]; //用來儲存對話方塊物件指標
在對話方塊類的初始化函式中需要把CPage1、CPage2和Tab Control關聯起來,並儲存頁面地址,設定初始頁面。
//為Tab Control增加兩個頁面
m_tab.InsertItem(0, _T("Farm"));
m_tab.InsertItem(1, _T("Note"));
//建立兩個對話方塊
m_page1.Create(IDD_DIALOG1, &m_tab);
m_page2.Create(IDD_DIALOG2, &m_tab);
//設定在Tab內顯示的範圍
CRect rc;
m_tab.GetClientRect(rc);
rc.top += 20;
rc.bottom -= 0;
rc.left += 0;
rc.right -= 0;
m_page1.MoveWindow(&rc);
m_page2.MoveWindow(&rc);
//把對話方塊物件指標儲存起來
pDialog[0] = &m_page1;
pDialog[1] = &m_page2;
//顯示初始頁面
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
//儲存當前選擇
m_CurSelTab = 0;
這裡我們用了一個CDialog指標陣列來進行儲存Tab Control的每個頁,陣列的大小是Tab Control頁面的個數,陣列下標對應著每個頁面的索引(這樣方便快速存取)。
接下來,為Tab Control新增訊息處理程式:
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CTabDlg::OnTcnSelchangeTab1)
void CTabDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
//把當前的頁面隱藏起來
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
//得到新的頁面索引
m_CurSelTab = m_tab.GetCurSel();
//把新的頁面顯示出來
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
*pResult = 0;
}
(1)在子對話方塊的CPP檔案,class外面定義自己的一個指標
TAB5_DIALOG *m_tab5_dialog;
(2)在子對話方塊的OnInitDialog()中初始化自己的指標
m_tab5_dialog = this;
(3)在主對話方塊的CPP檔案,class外面加入如下程式碼
extern TAB5_DIALOG *m_tab5_dialog;
(4)呼叫相應的UpdateData函式
m_tab5_dialog->UpdateData();
(5)獲得對應的控制元件值
CString m_test_edit1 = m_tab5_dialog->m_TAB5_CONTROL_EDIT;
m_TAB5_CONTROL_EDIT為子對話方塊edit control定義的CString 的值