1

我有一个带分离器的主框架。在左边我有我的(想象地命名)CAppView_Left,在右边我有 CAppView_Right_1 和 CAppView_Right_2。通过以下代码,我正确初始化了两个主要视图:

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 编译但无法运行应用程序,引发异常,告诉我我已经定义了视图。

有人可以建议我怎么做吗?另外,如何在视图或文档类的视图之间进行更改?

4

3 回答 3

1

有一篇 CodeProject 文章可以帮助你实现你想要的:

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

我之前已经在拆分器中替换了视图,所以如果上面没有帮助,我会发布一些我自己的代码。

于 2008-10-13T17:14:48.160 回答
0

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

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 是您的第二个视图

于 2008-10-13T16:14:22.273 回答
0

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

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

于 2008-10-13T17:32:14.053 回答