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_wndTabs.AddTab (&m_ApplyBus, _T("测试对话框"), (UINT)-1, FALSE);//将对话框假如属性页中,设置标题为:测试对话框
四、得到选项卡的个数
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();//使窗体重画