MFC-Tab Control控件使用
在MFC當中使用Tab Control控件切換不同的界面,使用起來會復雜一些,至少是比Qt中的Tab Widget復雜得多。我接下來會以一個MFC對話框應用程序為例子,說明Tab Control控件的簡單使用方法。
1.1建立一個MFC對話框應用程序,在對話框中拖入Tab Control控件,效果如下:
?
1.2在對話框類中,聲明一個CTabCtrl變量:
CTabCtrl m_tab;
變量m_tab用來與對話框中的Tab Control控件交互,為此要在DoDataExchange函數中加入DDX_Control語句:
DDX_Control(pDX, IDC_TAB_TEST, m_tab);
?
2.1在資源中插入兩個對話框,作為Tab Control控件切換的界面,然后必須將這兩個對話框的Border屬性設置為None,Style設置為Child,設置后的效果如下圖所示:
?
2.2為創建的兩個對話框建立兩個類,如CTestDlg1,CTestDlg2,添加類的方法:右擊對話框界面,在彈出框中選擇添加類;
3.1在Tab Control控件所在的對話框類的頭文件中添加以下內容并添加切換頁面對話框的頭文件:
public:
? ? ? ? int m_CurSelTab;?
? ? ? ? CTestDlg1 m_page1;?
? ? ? ? CTestDlg2 m_page2;?
? ? ? ? CDialog* pDialog[2]; ?//用來保存對話框對象指針
3.2在對話框類的初始化函數中需要把CTestDlg1、CTestDlg2和Tab Control關聯起來,并保存頁面地址,設置初始頁面,在OnInitDialog()中添加以下實現代碼:
? ? ? ? //為Tab Control增加兩個頁面
?? ?m_tab.InsertItem(0, _T("測試1"));
?? ?m_tab.InsertItem(1, _T("測試2"));
?
?? ?//創建兩個對話框
?? ?m_page1.Create(IDD_DIALOG_TEST1, &m_tab);
?? ?m_page2.Create(IDD_DIALOG_TEST2, &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頁面的個數,數組下標對應著每個頁面的索引(這樣方便快速存取)。
3.3為Tab Control添加消息處理程序,雙擊Tab Control控件,自動進入消息處理程序代碼:
void CTabControlTestDlg::OnTcnSelchangeTabTest(NMHDR *pNMHDR, LRESULT *pResult)
{
?? ?// TODO: 在此添加控件通知處理程序代碼
?
?? ?//把當前的頁面隱藏起來
? ? ? ? pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
? ? ? ? //得到新的頁面索引
? ? m_CurSelTab = m_tab.GetCurSel();
? ? ? ? //把新的頁面顯示出來
? ? ? ? pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
?
?? ?*pResult = 0;
}
?
本文參考的資料有:http://blog.csdn.net/hustspy1990/article/details/5425365
?
總結
以上是生活随笔為你收集整理的MFC-Tab Control控件使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决:java.lang.NoSuchM
- 下一篇: java 的几种对象 (PO,VO,DA