MFC新建一个tab页视图
来源:互联网 发布:破解网络尖兵 编辑:程序博客网 时间:2024/05/19 19:58
项目记录
功能描述:工具条点击某按钮,新打开一个视图
第一步,头文件里定义一个文档模板指针
CMultiDocTemplate* m_p3DEditViewTemplate; //3d视图编辑文档模板
第二步,构造函数里以防万一先清空这个指针
m_p3DEditViewTemplate=NULL;
第三步,初始化函数里初始化模板类
virtual BOOL InitInstance();//在重写的这个函数里
m_p3DEditViewTemplate = new CMultiDocTemplate( nIDR, RUNTIME_CLASS(CFhwdsDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CFhwds3DEditView));
其中CFhwds3DEditView继承于CView、Window3DOSG、GraphViewer(后两个是我们自己造的一个用于该视图显示三维osg,一个用于关联树节点那一套联动)
第四步,在某按钮的点击事件中生成这个视图
void CFhwdsApp::OnOpen3dEditView(){ // TODO: 在此添加命令处理程序代码 //若当前活动视图不是该视图则,若已有该视图,则设置为活动视图 if(this->OnActivateView(RUNTIME_CLASS(CFhwds3DEditView)) == FALSE){ //若没有则新建一个 this->OnNewView(m_p3DEditViewTemplate); CMDIChildWndEx* pActiveChild =(CMDIChildWndEx*) ((CMainFrame*)AfxGetMainWnd())->MDIGetActive(); CMFCTabCtrl *pTabCtrl = (CMFCTabCtrl *)pActiveChild->GetRelatedTabGroup(); pTabCtrl->SetTabLabel(pTabCtrl->GetTabsNum()-1,_T("三维编辑视图")); //画模型 IReservoirModelGraph *pIRModelGraph = ((CFhwdsApp*)AfxGetApp())->m_pIRModelGraph; if(!pIRModelGraph) return ; pIRModelGraph->updateDraw3d(this); }}bool CFhwdsApp::OnNewView(CMultiDocTemplate* pDocTemplate){ CMDIChildWnd* pActiveChild = ((CMainFrame*)AfxGetMainWnd())->MDIGetActive(); CDocument* pDocument; if (pActiveChild == NULL || (pDocument = pActiveChild->GetActiveDocument()) == NULL) { TRACE0("Now New the specify view\n"); ASSERT(pDocTemplate != NULL); ASSERT(pDocTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate))); pDocTemplate->OpenDocumentFile(NULL); return TRUE; } // otherwise we have a new frame to the same document! CMultiDocTemplate* pTemplate = pDocTemplate; ASSERT_VALID(pTemplate); CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild); if (pFrame == NULL) { TRACE0("Warning: failed to create new frame\n"); return FALSE; // command failed } pTemplate->InitialUpdateFrame(pFrame, pDocument); return TRUE;}bool CFhwdsApp::OnActivateView(CRuntimeClass *pView){ CMDIChildWnd* pActiveChild = ((CMainFrame*)AfxGetMainWnd())->MDIGetActive(); CDocument* pDoc; if (pActiveChild && (pDoc = pActiveChild->GetActiveDocument()) ) { POSITION viewPos = pDoc->GetFirstViewPosition(); while(viewPos) { CView *pCurView = pDoc->GetNextView(viewPos); if(pCurView->IsKindOf(pView)) { CFrameWnd *pFrame = pCurView->GetParentFrame(); if(pFrame) { pFrame->ActivateFrame(); return true; } } } } return false;}
好吧上面这段大致明白干了啥没深究过
第五步,析构部分
int CFhwdsApp::ExitInstance();//写这个函数里
if (m_p3DEditViewTemplate) delete m_p3DEditViewTemplate;
下面是效果图:
阅读全文
0 0
- MFC新建一个tab页视图
- MFC Ribbon Category实现tab页切换视图功能
- MFC Ribbon Category实现tab页切换视图功能
- MFC Ribbon Category实现tab页切换视图功能
- MFC Tab页
- 在MFC工程中新建一个对话框
- 新建MFC工程再次打开找不到按钮视图
- datagrid中点击a标签新建一个tab
- MFC tab
- MFC TAB
- MFC tab
- xcode6如何新建一个空项目+添加导航视图控制器
- xcode6如何新建一个空项目+添加导航视图控制器
- 从一个视图获取另一个视图(vc mfc)
- MFC实现多TAB页的切换
- 新建一个win32空工程,然后使用MFC创建程序
- 新建一个MFC ActiveX ControlWizard,调用已经存在的OCX
- MFC 删除一个非空文件夹 新建文件夹
- android studio 导入库提示失败的处理方法以及androidstudio 清理缓存的方法
- 容器与虚拟机的区别
- 不等式约束最优性条件
- 正则表达式
- this关键字的作用 使用this调用其他构造方法 使用this表示当前对象
- MFC新建一个tab页视图
- Java实现用户注册手机发码送验证
- GPIO库函数
- docker一键部署启动java web项目
- 单链表删除特定值
- 剑指offer-替换空格
- hibernate的三种状态
- 20171120测试笔记
- 阿里云oss c-sdk交叉编译