Несколько взаимозаменяемых представлений (MFC / C ++)

StackOverflow https://stackoverflow.com/questions/197987

Вопрос

У меня есть основная рама с разделителем.Слева у меня есть мой (образно названный) 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 компилируется, но не удается запустить приложение, вызывая исключение, сообщающее мне, что я уже определил представление.

Может кто-нибудь подсказать, как мне это сделать?Кроме того, как переключаться между представлениями либо из вида, либо из класса document?

Это было полезно?

Решение

Существует статья CodeProject, которая должна помочь вам достичь того, чего вы хотите:

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

Я уже заменял представления в разделителе раньше, поэтому, если вышесказанное не поможет, я опубликую часть своего собственного кода.

Другие советы

Вы не можете создать второй вид справа, потому что ваш

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 был вашим вторым представлением

Чтобы переключаться между представлениями, вам нужно явно удалить View, прежде чем создавать на его месте другое view.

Если вам нужно сохранить состояние взаимозаменяемых представлений, вам лучше сделать так, чтобы представления могли инициализировать свое состояние из документа.Будьте осторожны при обновлении документа до любого состояния, которое должно сохраняться между удалением и повторным созданием одного из представлений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top