1.先建立一個對話框MFC應用程序,然后在工具箱里面把Tab Control控件放到對話框中的合適位置上。
再在對話框類中,聲明一個CTabCtrl變量:
CTabCtrl m_tab;
變量m_tab用來與對話框中的Tab Control控件交互,為此要在DoDataExchange函數中加入DDX_Control語句:
DDX_Control(pDX, IDC_TAB1, m_tab);
IDC_TAB1是Tab Control控件的ID。
2.建立兩個對話框程序,用來當做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添加消息處理程序:
void CMy45455665Dlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) { //把當前的頁面隱藏起來 pDialog[m_CurSelTab]->ShowWindow(SW_HIDE); //得到新的頁面索引 m_CurSelTab = m_tab.GetCurSel(); //把新的頁面顯示出來 pDialog[m_CurSelTab]->ShowWindow(SW_SHOW); *pResult = 0; }
3.如果要在Tab Control控件外面獲取其內部對話框中控件的數據,就需要使用DDX/DDV機制,還要調用相應的UpdateData函數。
m_page1.UpdateData();
m_page2.UpdateData();