2 pingkai1217 pingkai1217 于 2016.03.11 16:58 提问

MFC框架下 单文档视图中多视图切换问题

在MainFrm.cpp 里对主视图进行了切分

 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
    // TODO: Add your specialized code here and/or call the base class

    //

    CRect rc;

    // 获取框架窗口客户区的CRect对象   
    GetClientRect(&rc);

    // 创建静态分割窗口,三行一列   
    if (!m_wndSplitter.CreateStatic(this, 3, 1))
        return FALSE;

    // 创建上面窗格中的视图   
    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTopview), CSize(rc.bottom, rc.right / 9), pContext))
        return FALSE;

    // 创建中间窗格中的视图   
    if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CCentview), CSize(rc.Width(), rc.right / 7 * 5.9), pContext))
        return FALSE;
    // 创建下面窗格中的视图 
    if (!m_wndSplitter.CreateView(2, 0, RUNTIME_CLASS(Cfootview), CSize(rc.bottom, rc.right / 7), pContext))
        return FALSE;
    centview = (CCentview*)m_wndSplitter.GetPane(1, 0);

    m_wndSplitter.HideSplitter();

    m_isSplitter = TRUE;
    return TRUE;
}

主要是切割成三行视图,中间也就是第二行视图是根据第一行视图里按钮的事件进行切换的 比如现在有 treeview, listview这2个视图;
切换时使用这种方式

 void CMainFrame::SwitchToView(int nViewType)
{
    CView* pView = (CView*)m_wndSplitter.GetPane(1,0);
    CRect rcRight, rcFrame;
    pView->GetClientRect(&rcRight);
    GetClientRect(&rcFrame);

    switch (nViewType)
    {
     case CENTVIEW:     //treeview
      {
         if (!pView->IsKindOf(RUNTIME_CLASS(Ctreeview)))
        {
            //删除旧的视图
            m_wndSplitter.DeleteView(1,0);
            //创建新的视图
            m_wndSplitter.CreateView(1,0, RUNTIME_CLASS(Ctreeview),
                CSize(rcRight.Width(), rcRight.Height()), NULL);
            //调整分布
            m_wndSplitter.RecalcLayout();
            treeview = (Ctreeview*)m_wndSplitter.GetPane(1,0);

            }
         break;
       }


        case CLOG:      //CLOG
        {
            if (!pView->IsKindOf(RUNTIME_CLASS(Clistview)))
            {
                //删除旧的视图
                m_wndSplitter.DeleteView(1,0);
                //创建新的视图
                m_wndSplitter.CreateView(1,0, RUNTIME_CLASS(Clistview),
                CSize(rcRight.Width(),rcRight.Height()),NULL);
                //调整分布
                m_wndSplitter.RecalcLayout();
                listview = (Clistview*)m_wndSplitter.GetPane(1,0);

            }
            break;
        }

    default:
        break;
    }

}

视图切换没有问题,现在主界面使用treeview视图 里面是有数据的,当我切换到listview视图如果给这个视图添加数据比如加个函数在OnInitialUpdate里调用 就会报错
图片说明

请大神看看是什么原因 应该怎么修改

编译器是 VS2013

1个回答

pingkai1217
pingkai1217   2016.03.12 08:56

求解答。。。。。。。。。。。。。。。。。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MFC单文档多视图的切换的3种实现
MFC单文档多视图的切换的3种实现 MFC建立程序工程向导时最后一步,选择CFormView作为View的基类。 假设工程名称为CMySingleDoc。 默认生成的View类名为:CMySingleDocView,它的属性为WS_CHILD,切记必须为WS_CHILG子窗口风格,不能为WS_POPUP弹出式窗口风格。   进入工程资源视图,添加对话框资源,添加控件,
单文档多视图切换方法
摘要:本文通过一个程序实例描述了在VC 6.0(vc2008可行)下如何在单文档程序中通过菜单动态控制多  个窗体的切换。     一、 引言     我们在编制程序中根据需求的不同会在程序风格上选择多文档、单文档或是对话框模式  ,对于单文档模式可能是我们使用比较多的,但有时我们想采用单文档的形式显示多个不同  的窗体,如作为数据库前台应用程序就会遇到此类问题,数据库由大量的表
MFC单文档多视图之间的数据传递
所谓的单文档多视图的程序,可以理解c
MFC 单文档视图中进行多种视图的切换
MFC 单文档视图中进行多种视图的切换 MFC 单文档视图中进行多种视图的切换
MFC单文档分割视图的基本使用
代码说明:闲来无事整理SDI(单文档)界面, 供大家探讨,有不足或错误处,望大家谅解 编译环境: 1,采用 VS2010 编辑, 没打补丁的 请自助补丁 实现功能: 1,创建标题栏按钮,创建标题栏栏菜单按钮,状态栏的实现 2,去掉SDI窗口 菜单 和 工具栏 3,将窗体分割,左边一行一列,右边三行一列 4,左边加载 tabview 且实现了 加载formview ,listview 动态加载 treeview 和 删除 treeview 功能 5,右上加载 richeditview 6,右中加载 tabview 且实现了 加载listview ,treeview 7,右下加载 formview 8,窗体界面 感谢IT前辈的的支持 9,实现了彼此间获取 view 指针的功能, 具体大家查看 CMainFrame 获取分割窗体 view 指针 CepWorkTabs 获取对应tab view 指针 从而可以调用和设置对应 view 的函数和属性值 0,代码没有任何第三方组件或dll(所谓开源吗,嘿嘿)
MFC SDI单文档多视图的实现及自由切换(2种实现方式简析)
MFC SDI单文档多视图的实现及自由切换结合网上学习总结别人的例子,以及参考MSDN给出的例子,对SDI多视图的实现进行了一个简单的总结,以记录学习点滴.首先在H文件有如下声明:class CMultiViewApp : public CWinApp{public:       CView* m_pFirstView;       CView* m_pOtherV
单文档多视图的实现方法
本文利用 CMFCTabCtrl 实现多视图的选项卡式显示,程序截图如下: 第一步:新建两个对话框,并分别为其添加类 CFirstDlg、CSecondDlg; 第二步:分别对两个对话框的属性做如下设置: NoInheritLayout          True Visible                          True
单文档多视图+MFC多文档多视图编程
http://wenku.baidu.com/view/61046a1810a6f524ccbf85eb.html
在单文档视图中加入对话框
利用单文档做界面显示时,一般的情况是:左侧显示图像、数据;右侧显示控件,通过控件控制左侧数据或图像的显示; 这样可以利用单文档结构,左侧为视图显示,右侧使用对话框。对话框可用使用CDialog类或CFormView。 采用CFormView,需要拆分窗口。具体步骤如下: 1,创建一个对话框类CMyFormDlg,基类为CFormView;创建类时会自动关联生成一个对话框资源,IDD_
MFC单文档视图拆分窗口
第一步:准备2个视图类(如CTViewOne, CTViewTwo)第二步:在CMainFrame类的头文件中添加数据成员变量://MainFrm.h protected: CSplitterWnd m_wndSplitter;第三步:重载CMainFrame类的OnCreateClient函数:BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT l