2008-10-13 3 views
1

У меня есть основной кадр с разделителем. Слева у меня есть (образно названный) CAppView_Leftand справа, у меня есть CAppView_Right_1 и CAppView_Right_2. Через следующий код я правильно инициализирует два основных просмотров:Несколько взаимозаменяемых представлений (MFC/C++)

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

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

Большое спасибо.

ответ

1

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

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

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

+0

Спасибо! Я нашел другие примеры для codeproject, но не так эффективен. Большое спасибо! :) – Konrad 2008-10-14 09:12:43

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

Спасибо за ввод - я не хочу создавать три панели. Я доволен двумя панелями, которые у меня есть, я просто хочу иметь возможность использовать два разных вида (взаимозаменяемые) в правой панели. – Konrad 2008-10-13 16:21:27

0

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

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