[MFC] TabControl選項卡的使用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM