MFC:Tab控件嵌入對話框


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();


免責聲明!

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



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