CMFCTabCtrl類主要用于分頁顯示,與CTabCtrl類似,自我認為功能比TabCtrl強大,但中間卻存在一些bug.
一、一般使用方法(vc2010同vs2008用法)
1.對話框放置PictureCtrl,設Type=Rectangle,Visible=False,Color=Gray,ID=IDC_STATIC_TAB
2.DDX_Control(pDX, IDC_STATIC_TAB, m_wndTabsArea);
3.CMFCTabCtrl m_wndTabs;
4.建立幾個對話框Border=None,Style=Child,建立Dlg類如:CApplyBus 定義對象:m_ApplyBus,對話框ID:IDD_APPLYBUS
二、建立
OnInitDialog()
CRect rectTabs;
m_wndTabsArea.GetWindowRect (rectTabs);
ScreenToClient (rectTabs);
m_wndTabs.Create (CMFCTabCtrl::STYLE_3D_ROUNDED_SCROLL, rectTabs, this, 1,CMFCTabCtrl::LOCATION_TOP); //建立CMFCTabCtrl m_wndTab對象
三、為m_wndTab添加頁籤
m_ApplyBus.Create(IDD_APPLYBUS, &m_wndTab); //建立對話框
四、得到頁籤的個數
m_wndTab.GetTabsNum();
五、設定為活動頁籤
m_wndTab.SetActiveTab(temptab); //設定第temptab為活動頁籤
六、BUG處理1------------------------------------------------------關閉按鈕無法實作(參考)
1、自己建立一個類繼承自:CMFCTabCtr l如:CMyMFCTabCtrl
2、重載afx_msg void OnLButtonDown(UINT nFlags, CPoint point)函數,函數定義如下:
void CMyMFCTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
CMFCTabCtrl::OnLButtonDown(nFlags, point); if (m_rectCloseButton.PtInRect(point))
{
int nTab = GetActiveTab();
if (nTab >= 0)
{
CWnd* pWnd = GetTabWnd (nTab);
pWnd->DestroyWindow ();
//delete pWnd;
RemoveTab(nTab);
}
}
}
3、建立時就可以直接用自己定義的類了:
m_wndTabs.Create (CMyMFCTabCtrl::STYLE_3D_ROUNDED_SCROLL, rectTabs, this, 1,CMFCTabCtrl::LOCATION_TOP);
後續如上。。。。。。。。。。。。
三、BUG2--------------------------------------------------------------------------------------失焦重新整理的問題
隻需在所在類中的OnPaint()中重新整理窗體即可:
CWnd* m_wnd=m_wndTab.GetActiveWnd();//得到活動窗體的句柄
m_wnd->RedrawWindow();//使窗體重畫
CMFCTabCtrl類主要用于分頁顯示,與CTabCtrl類似,自我認為功能比TabCtrl強大,但中間卻存在一些bug.
一、一般使用方法(vc2010同vs2008用法)
1.對話框放置PictureCtrl,設Type=Rectangle,Visible=False,Color=Gray,ID=IDC_STATIC_TAB
2.DDX_Control(pDX, IDC_STATIC_TAB, m_wndTabsArea);
3.CMFCTabCtrl m_wndTabs;
4.建立幾個對話框Border=None,Style=Child,建立Dlg類如:CApplyBus 定義對象:m_ApplyBus,對話框ID:IDD_APPLYBUS
二、建立
OnInitDialog()
CRect rectTabs;
m_wndTabsArea.GetWindowRect (rectTabs);
ScreenToClient (rectTabs);
m_wndTabs.Create (CMFCTabCtrl::STYLE_3D_ROUNDED_SCROLL, rectTabs, this, 1,CMFCTabCtrl::LOCATION_TOP); //建立CMFCTabCtrl m_wndTab對象
三、為m_wndTab添加頁籤
m_ApplyBus.Create(IDD_APPLYBUS, &m_wndTab); //建立對話框
四、得到頁籤的個數
m_wndTab.GetTabsNum();
五、設定為活動頁籤
m_wndTab.SetActiveTab(temptab); //設定第temptab為活動頁籤
六、BUG處理1------------------------------------------------------關閉按鈕無法實作(參考)
1、自己建立一個類繼承自:CMFCTabCtr l如:CMyMFCTabCtrl
2、重載afx_msg void OnLButtonDown(UINT nFlags, CPoint point)函數,函數定義如下:
void CMyMFCTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
CMFCTabCtrl::OnLButtonDown(nFlags, point); if (m_rectCloseButton.PtInRect(point))
{
int nTab = GetActiveTab();
if (nTab >= 0)
{
CWnd* pWnd = GetTabWnd (nTab);
pWnd->DestroyWindow ();
//delete pWnd;
RemoveTab(nTab);
}
}
}
3、建立時就可以直接用自己定義的類了:
m_wndTabs.Create (CMyMFCTabCtrl::STYLE_3D_ROUNDED_SCROLL, rectTabs, this, 1,CMFCTabCtrl::LOCATION_TOP);
後續如上。。。。。。。。。。。。