代码之家  ›  专栏  ›  技术社区  ›  Konrad

多个可互换视图(MFC/C++)

  •  1
  • Konrad  · 技术社区  · 16 年前

    if (!m_wndSplitter.CreateStatic(this, 1, 2))
    {
        TRACE0("Failed to CreateStaticSplitter\n");
        return FALSE;
    }
    else 
    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CAppView_Left), CSize(300, 200), pContext))
    {
        TRACE0("Failed to create left pane\n");
        return FALSE;
    }
    else 
    if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CAppView_Right_1), CSize(375, 200), pContext))
    {
        TRACE0("Failed to create first right pane\n");
        return FALSE;
    }
    

    ...

    我想做的是在右侧框架内创建第二个视图,但是当我尝试添加以下内容时:

    if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CAppView_Right_2), CSize(375, 200), pContext))
    {
        TRACE0("Failed to create first right pane\n");
        return FALSE;
    }
    

    VS编译但无法运行应用程序,引发异常,告诉我已定义视图。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Rob    16 年前

    有一篇CodeProject文章可以帮助您实现您的目标:

    http://www.codeproject.com/KB/splitter/usefulsplitter.aspx

    我以前在拆分器中替换过视图,所以如果上面的操作没有帮助,我将发布一些我自己的代码。

        2
  •  0
  •   SmacL    16 年前

    无法创建第二个右视图,因为

    m_wndSplitter.CreateStatic(this, 1, 2) 
    

    只创建了两列。你可以把这个改成

    m_wndSplitter.CreateStatic(this, 1, 3)
    

    if (!m_wndSplitter.CreateView(0, 2, RUNTIME_CLASS(CAppView_Right_2), CSize(375, 200), pContext))
    {    
    TRACE0("Failed to create first right pane\n");   
     return FALSE;
    }
    

    这将产生三列,每个列都有一个单独的视图。您还可以创建一个额外的拆分器窗口来拆分一个现有视图,例如

    m_wndSplitter2.CreateStatic(m_View2, 2, 1)
    

    m_view2是您的第二个视图

        3
  •  0
  •   Aidan Ryan    16 年前

    要在视图之间切换,您需要在创建另一个视图之前显式删除视图。

    如果需要保留可互换视图的状态,最好使视图能够从文档中初始化其状态。请小心使用需要在删除和重新创建其中一个视图之间停留的任何状态更新文档。