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

问题描述

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(10);    CRect rcRight rcFrame;    pView->GetClientRect(&rcRight);    GetClientRect(&rcFrame);    switch (nViewType)    {     case CENTVIEW:     //treeview      {         if (!pView->IsKindOf(RUNTIME_CLASS(Ctreeview)))        {            //删除旧的视图            m_wndSplitter.DeleteView(10);            //创建新的视图            m_wndSplitter.CreateView(10 RUNTIME_CLASS(Ctreeview)                CSize(rcRight.Width() rcRight.Height()) NULL);            //调整分布            m_wndSplitter.RecalcLayout();            treeview = (Ctreeview*)m_wndSplitter.GetPane(10);            }         break;       }        case CLOG:      //CLOG        {            if (!pView->IsKindOf(RUNTIME_CLASS(Clistview)))            {                //删除旧的视图                m_wndSplitter.DeleteView(10);                //创建新的视图                m_wndSplitter.CreateView(10 RUNTIME_CLASS(Clistview)                CSize(rcRight.Width()rcRight.Height())NULL);                //调整分布                m_wndSplitter.RecalcLayout();                listview = (Clistview*)m_wndSplitter.GetPane(10);            }            break;        }    default:        break;    }}

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

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

编译器是 VS2013

解决方案

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

时间: 2024-10-31 05:51:33

MFC框架下 单文档视图中多视图切换问题的相关文章

用VC++在单文档界面中创建多视图

一个单文档界面中存在多个视图,并且可以根据需要进行视图的动态切换,这是当前比较流行的界面风格,它可以满足许多用户在操作和显示方面的需要.这种界面风格的主要代表软件是Outlook Express.而用VC++实现这种风格的界面有一定难度,笔者就这个问题进行了研究,并归纳总结出两种实现方法(这些代码都在VC++ 6.0下调试通过),使用时关键注意步骤和实现思路,不必拘泥于代码的形式. 方法一:静态创建切换法 步骤描述: 1.在窗口显示之前先将需要切换的所有的视图对象创建好,除首先显示的视图以外,其

在MFC单文档程序中,如何在子对话框类中访问视类中的一个变量?

问题描述 在MFC单文档程序中,如何在子对话框类中访问视类中的一个变量? 如题,小弟最近遇到一个问题,新建一个单文档程序,并在其中引入对话框资源.我想在视类的OnDraw()函数中通过响应视类的一个变量的变化来改变视类窗口中图形的状态,而该视类变量的变化是由对话框中的一个控件控制的,这个控件是由旋钮控件和编辑控件捆绑而成的.在网上看了一些资料,试了其中的一些方法,都没能成功.论坛中高手众多,想请热心的高手们给个解决方法,在此先谢过了!能给个相似的例子的更好! 解决方案 要么你把那个变量定义成静态

代码合并-MFC把对话框添加到单文档中

问题描述 MFC把对话框添加到单文档中 MFC把对话框添加到单文档中,对话框已经在单文档下做好了,但是代码怎么加呢,代码需要加在什么地方呢?求大神帮忙,Vc作业,急需,谢谢.QQ:291119478 解决方案 这个很简单,你有两个办法: 思路1:新建单文档项目,然后最后一步让View从CFormView继承.产生的程序文档视图就是一个对话框界面,在资源中你可以看到这个对话框,把控件放进来,用ClassWizard映射好成员变量和事件处理程序,然后把代码粘贴过来. 思路2:将对话框程序的源代码和对

vc++-MFC 单文档添加嵌入式对话框

问题描述 MFC 单文档添加嵌入式对话框 需要在右侧客户区添加一个嵌入式的对话框.. 解决方案 在MFC单文档/多文档/对话框环境下添加控制台vs2010mfc单文档中添加对话框中的控件MFC如何在单文档下添加背景图片 解决方案二: 单文档才有CFormView,它本身就是i一个对话框类似的view,而且你右边客户区可以用Edit控件. 解决方案三: 新建一个资源管理器样式的程序,然后左右都从CForm继承. 解决方案四: CSplittWnd拆分视图框架窗口即可.CMainFrame::OnC

求问单文档mfc相关问题

问题描述 求问单文档mfc相关问题 单文档mfc链接数据库 但始终显示IDM_ABOUTBOX和IDS_ABOUTBOX未定义 有什么好的解决办法么? 解决方案 下载一个完整的代码:http://download.csdn.net/detail/wuqiangjx2012/4196086 而不是仅仅拷贝代码片段. 解决方案二: http://download.csdn.net/detail/zhucr1985/2942315 解决方案三: 这是帮助对话框自带的.你工程中有这些资源吗 解决方案四:

vc++-单文档窗口句柄变量如何添加?

问题描述 单文档窗口句柄变量如何添加? 单文档窗口句柄变量如何添加? 解决方案 在单文档窗口中添加背景图片 解决方案二: 就是添加一个HWND类型的变量呗,就是书上写的那样,HWND h;这样就创建了一个名叫h的窗口句柄变量了 解决方案三: 自己定一个HWND变量,然后用GetMainWnd等获取窗口句柄等

c++-MFC 单文档 多视图中各视图的创建顺序能否改变?

问题描述 MFC 单文档 多视图中各视图的创建顺序能否改变? 每个视图OnInitialupdate()的顺序能否改变? 我每个视图的创建顺序先后会互相影响,所以需要各视图能按我希望的顺序创建 我之前猜测CMainFrame::OnCreateClient中各视图的分割语句顺序可能影响其创建顺序,但是刚才调试发现貌似不是的.. 解决方案 将那些涉及顺序的代码从OnInitialupdate()提取出来,作为独立的函数. 定义一个全局变量,比如int steps=0 每个OnInitialupda

数据-MFC 单文档视图切分视图调用问题

问题描述 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); /

mfc-基于MFC对话框的程序中如何打开一个单文档

问题描述 基于MFC对话框的程序中如何打开一个单文档 我是MFC的初学者,现在遇到了一个问题,就是如何在基于对话框的程序中,如何通过一个对话框中的按钮打开一个单文档.(我的目的是想在打开的单文档中绘制折线图),求各位大神指点 解决方案 你干嘛用基于对话框的程序,你完全可以创建一个基于单文档的程序,再添加对话框,这比你先创建一个对话框的程序,再添加文档视图支持简单的多. 解决方案二: 在MFC下使用OpenGL的一个简单的例子(基于单文档程序)MFC应用程序类型:单文档.多文档与基于对话框MFC窗