pingkai1217 2016-03-12 02:17 采纳率: 41.7%
浏览 648

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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 Arcgis相交分析无法绘制一个或多个图形
    • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
    • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
    • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
    • ¥30 3天&7天&&15天&销量如何统计同一行
    • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
    • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
    • ¥15 vs2019中数据导出问题
    • ¥20 云服务Linux系统TCP-MSS值修改?
    • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)