本文利用 CMFCTabCtrl 實現多視圖的選項卡式顯示,程式如下:
第一步:建立兩個對話方塊,並分別為其添加類 CFirstDlg、CSecondDlg;
第二步:分別對兩個對話方塊的屬性做如下設定:
NoInheritLayout True
Visible True
Style Child
第三步:在程式的View類標頭檔中包含兩個對話方塊類的標頭檔,並分別為其聲明一個變數:
CFirstDlg m_dlgFirst;CSecondDlg m_dlgSecond;
第四步:在程式的View類標頭檔中聲明一個 CMFCTabCtrl 類型的變數m_wndTabs:
CMFCTabCtrl m_wndTabs;
第五步:在程式的View類的 OnCreate 函數中分別建立兩個對話方塊、m_wndTabs,以及將對話方塊與 m_wndTabs 關聯起來,代碼如下:
CRect rectDummy;rectDummy.SetRectEmpty();if( !m_wndTabs.Create(CMFCTabCtrl::STYLE_3D_ONENOTE, rectDummy, this, 1, CMFCBaseTabCtrl::LOCATION_TOP) ){ TRACE0("未能建立Tab控制項!"); return -1;}m_dlgFirst = new CFirstDLg();m_dlgSecond = new CSecondDlg();if( !m_dlgFirst->Create(IDD_DIALOG1, &m_wndTabs) || !m_dlgSecond->Create(IDD_DIALOG2, &m_wndTabs) ){ TRACE0("未能建立對話方塊!"); return -1;}UpdateFonts();m_wndTabs.AddTab( m_dlgFirst, "第一個", (UINT)0);m_wndTabs.AddTab( m_dlgSecond, "第二個", (UINT)1);m_wndTabs.EnableActiveTabCloseButton();
第六步:為程式的View類添加 WM_SIZE 訊息響應,在訊息的響應函數中設定m_wndTabs 的位置,代碼如下:
m_wndTabs.SetWindowPos(NULL, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
第七步:為程式的View類添加函數 void UpdateFonts() ,在函數中分別設定對話方塊的字型,代碼如下:
m_dlgFirst->SetFont(&afxGlobalData.fontRegular);m_dlgSecond->SetFont(&afxGlobalData.fontRegular);
好了,編譯運行,就可以看到如開頭圖片所示的程式了。希望大家舉一反三,想出更好的方法!