您的位置:首页 > 其它

MFC一一单文档下实现多标签视图(继承CTabView类)

2017-09-12 22:26 591 查看
在上一节中,讲述了拆分窗口类CSplitterWnd,具体见:http://blog.csdn.net/xuanyin235/article/details/77948615

其间提到了CTabViewEx视图类,这个类继承自CTabView类,接下来我们讲解一下单文档视图中有关多标签视图的具体实现。

(1).实现CTabViewEx继承自CTabView,并在OnInitialUpdate()消息响应函数中利用AddView函数添加对应的FromView类型的视图Dialog

enum _ENMU_VIEW_NAME
{
eViewName1,
eViewName2,
eViewName3,
eViewName4,
NUM_OF_VIEW_NAME
};

static char *gsViewName[NUM_OF_VIEW_NAME]=
{
"MyView Name1",
"MyView Name2",
"MyView Name3",
"MyView Name4"
};
void CTabViewEx::OnInitialUpdate()
{
CTabView::OnInitialUpdate();

// TODO: 在此添加专用代码和/或调用基类
for (int iVew=0;iVew<NUM_OF_VIEW_NAME;iVew++)
{
switch (iVew)
{
case eViewName1:AddView(RUNTIME_CLASS(CFormViewName1),gsViewName[iVew],iVew);break;
case eViewName2:AddView(RUNTIME_CLASS(CFormViewName2),gsViewName[iVew],iVew);break;
case eViewName3:AddView(RUNTIME_CLASS(CFormViewName3),gsViewName[iVew],iVew);break;
case eViewName4:AddView(RUNTIME_CLASS(CFormViewName4),gsViewName[iVew],iVew);break;
}
}
}
然后在OnCreate函数中添加对应摆放格式:

int CTabViewEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTabView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO:  在此添加您专用的创建代码

this -> GetTabControl().SetLocation( CMFCTabCtrl:: LOCATION_TOP);    //方向上顶
this -> GetTabControl().ModifyTabStyle( CMFCTabCtrl:: STYLE_3D_ONENOTE);    //风格
//this -> GetTabControl().EnableAutoColor( TRUE );  //自动着色
this -> GetTabControl().SetTabBorderSize( 0 ); //边框大小
//this -> GetTabControl().HideSingleTab( TRUE );   //单个Tab时候不显示Tab标签
//this -> GetTabControl().EnableTabSwap( FALSE );    //禁止拖动
return 0;
}

另外,这里有个注意点,就是在CTabViewEx类定义中加入DECLARE_DYNCREATE(CTabViewEx)

并在对应的cpp文件中加入IMPLEMENT_DYNCREATE(CTabViewEx, CTabView),这样FromView类型的Dialog视图才会显示出来

然后,结合上一节当中的代码,可以得到类似如下的窗口视图(如下视图只截取了部分形式)





















内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: