2 rivard rivard 于 2016.01.22 16:44 提问

MFC单文档视图 窗口分割 如何切换视图

图片说明
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
if(!m_wndSplitter.CreateStatic(this,1,2))
return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLeftPaneView),CSize(100,100),pContext))
return FALSE;
if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CEditPaneView),CSize(100,100),pContext))
return FALSE;

m_pEditView = (CEditPaneView*)m_wndSplitter.GetPane(0,1);

return TRUE;

}

switch(nViewType)
{
case EDITVIEW:      //CEditPaneView
    {
        if(!pView->IsKindOf(RUNTIME_CLASS(CEditPaneView)))
        {
            //删除旧的视图
            m_wndSplitter.DeleteView(0,1);
            /*CWnd *pWnd=m_wndSplitter.GetPane(0,1);
            (m_wndSplitter.GetPane(0,1))->ShowWindow(SW_HIDE);*/
            //创建新的视图
            m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CEditPaneView),
                CSize(rcRight.Width(),rcRight.Height()),NULL);
            //调整分布
            m_wndSplitter.RecalcLayout();
            m_pEditView= (CEditPaneView*)m_wndSplitter.GetPane(0,1);
        }
        break;
    }
case LISTVIEW:  //CListPaneView
    {
        if(!pView->IsKindOf(RUNTIME_CLASS(CListPaneView)))
        {
            m_wndSplitter.DeleteView(0,1);
            m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListPaneView),
                CSize(rcRight.Width(),rcRight.Height()),NULL);
            m_wndSplitter.RecalcLayout();
            m_pListView= (CListPaneView*)m_wndSplitter.GetPane(0,1);
        }
        break;
    }
default:
    break;
}


上面是部分代码,主要是想实现1-窗口分割,2-分割后的子窗口进行不同视图的显示;
查了资料,网上都是给出的删除再重新建立视图的做法,如上面示例,请问大家有没有遇到类似的问题,都是如何解决的呢,谢谢!

2个回答

caozhy
caozhy   Ds   Rxr 2016.01.22 23:35

分割后的子窗口进行不同视图的显示
不是很理解你问的是什么。你现在不就是不同的视图么

rivard
rivard 我的意思是 分割后的窗口,需要切换视图显示,但是现在采用的方法是删除掉然后再新建一个视图,那有没有采用隐藏然后显示的方法呢? 比如上面的程序例子中,选择编辑视图的时候,隐藏列表视图,显示编辑视图,而不是采用删除这个窗口当前视图,重建视图的方法,!
2 年多之前 回复
rivard
rivard   2016.01.25 08:43

我的意思是 分割后的窗口,需要切换视图显示,但是现在采用的方法是删除掉然后再新建一个视图,那有没有采用隐藏然后显示的方法呢? 比如上面的程序例子中,选择编辑视图的时候,隐藏列表视图,显示编辑视图,而不是采用删除这个窗口当前视图,重建视图的方法,!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MFC单文档视图拆分窗口
第一步:准备2个视图类(如CTViewOne, CTViewTwo)第二步:在CMainFrame类的头文件中添加数据成员变量://MainFrm.h protected: CSplitterWnd m_wndSplitter;第三步:重载CMainFrame类的OnCreateClient函数:BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT l
MFC单文档多视图的切换的3种实现
MFC单文档多视图的切换的3种实现 MFC建立程序工程向导时最后一步,选择CFormView作为View的基类。 假设工程名称为CMySingleDoc。 默认生成的View类名为:CMySingleDocView,它的属性为WS_CHILD,切记必须为WS_CHILG子窗口风格,不能为WS_POPUP弹出式窗口风格。   进入工程资源视图,添加对话框资源,添加控件,
MFC对单文档进行窗口分割。
新建单文档工程,在MainFrm.cpp中添加虚函数OnCreateClient(); 1、在虚函数中添加代码: BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 CRect rect; GetClientRect(&re
MFC单文档切换视图
在一些情况下,应用程序有许多信息要显示,当一个窗口内显示不下时,VC提供的MDI应用程序可以解决这个问题,但是如果应用程序只是对单个文档,采用多种方式显示,则采用SDI更合适。那么,如何在单文档应用程序中实现多视图呢?缺省情况下,派生类的构造函数是pretected类型的,必须将它改为public类型,因为我们将会动态生成派生视图类并切换活动的视图。也可以一次生成所有的视图,但是这样造成系统资源的
单文档多视图(分割窗口)
单文档多视图 本节演示了如何在一个框架中显示两个视图。 1.实例说明 在MFC中,视图必须存在于框架之中,而单文档只有一个框架,所以一次只能显示一个视图,如果想显示新视图必须关闭当前视图。如果想同时显示两个视图可以用分割窗口。 本示例用于查询学生信息,数据存在文档类中,用户可以在第一个视图中输入学号,单击“查找”按钮查找学生消息,结果会显示在第二个视图中,效果如图1-53所示。 图1
单文档多视图切换方法
摘要:本文通过一个程序实例描述了在VC 6.0(vc2008可行)下如何在单文档程序中通过菜单动态控制多  个窗体的切换。     一、 引言     我们在编制程序中根据需求的不同会在程序风格上选择多文档、单文档或是对话框模式  ,对于单文档模式可能是我们使用比较多的,但有时我们想采用单文档的形式显示多个不同  的窗体,如作为数据库前台应用程序就会遇到此类问题,数据库由大量的表
MFC基于单文档分割视图后子窗口点击编辑框获得相应的操作
先介绍在网上看到的一篇文章中介绍的几种方法,试了之后没有任何反应,目前原因不详,(猜想可能是我创建了单文档之后又用了分屏函数,对话框为子对画框),文章见http://blog.csdn.net/xiaoyaofriend/article/details/7754056 在写界面的用于触屏时,往往需要编辑框弹出盘来进行输入,下面就将我思路写一下吧, 1.刚开始在网让找一些这方面的资料,结
CSplitterWnd类分割MFC单文档应用程序窗口
前言 网上其他大牛已经对MFC窗口分割进行了详细介绍,这里主要用意是分享我在做窗口分割的经验,若是对大家能够有所帮助的话,我倍感荣幸,由于本人水平有限,如若本文中出现错误,望大家见谅与指正! 工具函数 MFC窗口分割的作案工具主要是CSplitterWnd类成员函数CreateStatic()与CreateView(),CreateStatic()函数用于分割窗口,可以利用返回值判断分割是否
单文档下Formview多窗口切换
摘要:本文通过一个程序实例描述了在VC 6.0(vc2008可行)下如何在单文档程序中通过菜单动态控制多  个窗体的切换。     一、 引言     我们在编制程序中根据需求的不同会在程序风格上选择多文档、单文档或是对话框模式  ,对于单文档模式可能是我们使用比较多的,但有时我们想采用单文档的形式显示多个不同  的窗体,如作为数据库前台应用程序就会遇到此类问题,数据库由大量的表
单文档拆分的子窗口大小固定
MFC单文档视图利用CSplitterWnd类实现窗口的拆分,但是直接生成的子窗口的区域边框可通过鼠标拖动来改变大小,这在很多应用场合下是不允许的, 为了不可改变子窗口的大小,需要重载 CSplitterWnd类的OnLButtonDown和OnMouseMove函数,为此需要利用CSplitterWnd类的派生类重载函数。 从CSplitterWnd派生自己的类CMySplitter