CMFCTabCtrl类主要用于分页显示,与CTabCtrl类似,自我认为功能比TabCtrl强大,但中间却存在一些bug.
一、一般使用方法(vc2010同vs2008用法)
1.对话框放置PictureCtrl,设Type=Rectangle,Visible=False,Color=Gray,ID=IDC_STATIC_TAB(实践证明使用Tab Control资源创建不成功,必须使用Picture Control)
2.DDX_Control(pDX, IDC_STATIC_TAB, m_wndTabsArea);(m_wndTabArea类型为CStatic)
3.CMFCTabCtrl m_wndTabs;
4.创建几个对话框Border=None,Style=Child,创建Dlg类如:CApplyBus 定义对象:m_ApplyBus,对话框ID:IDD_APPLYBUS
二、创建
OnInitDialog()
三、为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();//使窗体重画