1. 程式人生 > >MFC 主對話方塊獲得tab control子對話方塊控制元件的值

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 的值