MFC中,因項目需要使用TabControl ,使用過程中發現,MFC中的TabControl與C#的TabControl不同,不能通過屬性來創建選項頁,只能代碼生成綁定。
以下為具體的實現方法步驟:
1.把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;
3.在對話框類的初始化函數中需要把CPage1、CPage2和Tab Control關聯起來,並保存頁面地址,設置初始頁面。
//為Tab Control增加兩個頁面 m_tab.InsertItem(0, _T("第一頁")); m_tab.InsertItem(1, _T("第二頁")); //設定在Tab內顯示的范圍 CRect rc; m_tab.GetClientRect(rc);////獲得TAB控件的坐標 //定位選項卡頁的位置,這里可以根據情況自己調節偏移量 rc.top += 20; rc.bottom -= 0; rc.left += 0; rc.right -= 0; //創建兩個對話框 m_page1.Create(IDD_DIALOG1, &m_tab);//&m_tab也可以改成Tab的ID m_page2.Create(IDD_DIALOG2, &m_tab); //將子頁面移動到指定的位置 m_page1.MoveWindow(&rc); m_page2.MoveWindow(&rc); //顯示子頁面 //顯示初始頁面 m_page1.ShowWindow(SW_SHOW); m_page2.ShowWindow(SW_HIDE); //保存當前選擇 //m_CurSelTab = 0; m_tab.SetCurSel(0);
4.為Tab Control添加消息處理程序OnTcnSelchangeTab1()事件
void CCollectControlDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult) { *pResult = 0; switch (m_tab.GetCurSel()) { case 0: m_page1.ShowWindow(SW_SHOW); m_page2.ShowWindow(SW_HIDE); break; case 1: m_page1.ShowWindow(SW_HIDE); m_page2.ShowWindow(SW_SHOW); break; default: break; } }
5.如果要在Tab Control控件外面獲取其內部對話框中控件的數據,就需要使用DDX/DDV機制,還要調用相應的UpdateData函數。
m_page1.UpdateData();
m_page2.UpdateData();
參考鏈接:
http://blog.csdn.net/hustspy1990/article/details/5425365
http://jingyan.baidu.com/article/93f9803f0b7695e0e46f55a7.html
http://blog.sina.com.cn/s/blog_7050644f0100uagn.html