MFC单文档多视图的切换的3种实现
2015-04-27 09:48
1146 查看
MFC单文档多视图的切换的3种实现
MFC建立程序工程向导时最后一步,选择CFormView作为View的基类。
假设工程名称为CMySingleDoc。
默认生成的View类名为:CMySingleDocView,它的属性为WS_CHILD,切记必须为WS_CHILG子窗口风格,不能为WS_POPUP弹出式窗口风格。
进入工程资源视图,添加对话框资源,添加控件,完成后再为对话框添加类,注意选择CFormView作为基类,这样将生成视图类(派生自CFormView)。假设名称为CMyView1.
第一种实现:
利用CFrameWnd的CreateView成员函数通过CCreateContext结构与文档产生关联
MSDN微软官方对这个函数的说明:
这个函数是用来在在一个框架窗口内创建视图的。该函数有2个参数,一个是CCreateContext结构用来设置与视图关联的文档类,第二个参数默认是AFX_IDW_PANE_FIRST,注意一般不要修改,默认即可,下面将讲解为什么保持默认,这个参数到底有什么含义。
参考代码如下:
第二种实现:
用CCreateContext结构使CMyView1视图与Document对象关联
1. 把向导生成的CMyView1的默认构造函数的Protected属性改为Public;后面我们会用到构造函数构造对象,第一种方法使用的是动态创建的方法,所以不需要更改Protected属性。
2. 必须重写CWnd::Create()方法(上图MSDN有说明)
3. /*第三种方法,用Document.AddView()使CMyView1视图与文档关联*/
MFC建立程序工程向导时最后一步,选择CFormView作为View的基类。
假设工程名称为CMySingleDoc。
默认生成的View类名为:CMySingleDocView,它的属性为WS_CHILD,切记必须为WS_CHILG子窗口风格,不能为WS_POPUP弹出式窗口风格。
进入工程资源视图,添加对话框资源,添加控件,完成后再为对话框添加类,注意选择CFormView作为基类,这样将生成视图类(派生自CFormView)。假设名称为CMyView1.
第一种实现:
利用CFrameWnd的CreateView成员函数通过CCreateContext结构与文档产生关联
MSDN微软官方对这个函数的说明:
这个函数是用来在在一个框架窗口内创建视图的。该函数有2个参数,一个是CCreateContext结构用来设置与视图关联的文档类,第二个参数默认是AFX_IDW_PANE_FIRST,注意一般不要修改,默认即可,下面将讲解为什么保持默认,这个参数到底有什么含义。
参考代码如下:
CDocument *pDoc= GetActiveDocument(); GetActiveView()->DestroyWindow(); CCreateContext cc; cc.m_pNewViewClass= RUNTIME_CLASS(CMyView1); cc.m_pCurrentDoc=pDoc; cc.m_pCurrentFrame=this; CView *pNewView =(CView *)this->CreateView(&cc); this->SetActiveView(pNewView); //必须手动设置视图Active状态 this->ShowWindow(SW_SHOW); //手动设置可见 RecalcLayout();
第二种实现:
用CCreateContext结构使CMyView1视图与Document对象关联
1. 把向导生成的CMyView1的默认构造函数的Protected属性改为Public;后面我们会用到构造函数构造对象,第一种方法使用的是动态创建的方法,所以不需要更改Protected属性。
2. 必须重写CWnd::Create()方法(上图MSDN有说明)
CView *pOldView = GetActiveView(); CView *pNewView = (CView *)new CMyView1(); CCreateContext cc; cc.m_pCurrentDoc =GetActiveDocument(); cc.m_pNewViewClass =RUNTIME_CLASS(CShowDlg1); //必须重写CWnd::Create()方法 pNewView->Create(NULL,NULL,WS_CHILD | WS_BORDER,CMainFrame::rectDefault,this,AFX_IDW_PANE_FIRST,&cc); this->SetActiveView(pNewView); pNewView->ShowWindow(SW_SHOW); pOldView->ShowWindow(SW_HIDE); delete pOldView; RecalcLayout();
3. /*第三种方法,用Document.AddView()使CMyView1视图与文档关联*/
CDocument *pDoc = GetActiveDocument(); CView *pOldView = GetActiveView(); CView *pNewView = (CView *)new CShowDlg1(); pNewView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CMainFrame::rectDefault,this, AFX_DW_PANE_FIRST+1,NULL); //交换View的ID号,至于为什么交换?看上图MSDN解释 int nID = pNewView->GetDlgCtrlID(); pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); pOldView->SetDlgCtrlID(nID); SetActiveView(pNewView); //手动设置Active活动状态 pNewView->ShowWindow(SW_SHOWMAXIMIZED);//手动设置可见 pOldView->ShowWindow(SW_HIDE); pDoc->AddView(pNewView); //是CMyView1与文档类产生关联 pDoc->RemoveView(pOldView); RecalcLayout();
相关文章推荐
- MFC单文档多视图的切换的3种实现
- MFC SDI单文档多视图的实现及自由切换(2种实现方式简析)
- VC 单文档方式下多视图的实现及自由切换
- MFC多视图共用一文档实现
- 使用VC创建单文档,并实现视图切换
- 通过按钮控件实现MDI新建子窗口(MFC自动生成的视图、文档、子框架共用)
- MFC Ribbon Category实现tab页切换视图功能
- MFC 单文档多视图实现(不是完全原创的,但是也不是直接转的,核心看法原创)
- MFC项目开发之单文档多视图实现
- VC小技巧(6)-----单文档多视图实现视图间的切换
- MFC一一单文档下实现多标签视图(继承CTabView类)
- MFC Ribbon Category实现tab页切换视图功能
- 《转》MFC单文档视图切换
- MFC单文档视图切换
- MFC编程(标签控件Tab Control(选项卡控件) 和picture control 来实现视图的切换 )
- MFC Ribbon Category实现tab页切换视图功能
- 切换多视图(mfc单文档程序)
- MFC单文档实现菜单切换
- VC的MDI中实现动态切换文档视图
- MFC学习之路(七)实现多文档的单文档多视图