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

问题描述 投票:1回答:3

我有一个分流的主框架。在左边我有我有CAppView_Right_1and CAppView_Right_2正确的我(想象力的名字命名)CAppView_Leftand。通过下面的代码我正确初始化两个主要观点:

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

有人建议我该怎么做呢?此外,如何从一个视图或文档类的视图之间改变?

c++ view mfc document csplitterwnd
3个回答
1
投票

有一个CodeProject上的文章,应该帮助你实现你想要什么:

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

我之前已经取代在分割的观点,因此,如果上面没有帮助,我会发布一些我自己的代码。


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是你的第二个观点


0
投票

要视图之间切换,你会创造在它的地方另一个视图前需要明确DeleteView。

如果您需要保留的互换意见的状态,你最好的意见,能够从文件初始化它们的状态。小心更新需要坚持围绕缺失和意见一个再创造之间的任何状态的文件。

© www.soinside.com 2019 - 2024. All rights reserved.