Поработав над этим пару дней, мне удалось решить собственную проблему, и я добавляю решение здесь для всех, у кого может быть такая же проблема.
Объявите два класса представления, в моем случае CElement View, который является производным классом CWnd, и CSampleViewer3dView, который является производным классом CView.
В каждом из этих классов добавьте переменную с доступом privateвведите CSplitterWnd и имя m_wndSplitter.
Добавьте переопределение для функции OnCreateClient в CChildFrame, это должно добавить код:
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
в ChildFrm.h, вытакже следует добавить логический флаг m_bInitSplitter в ChildFrm.h:
BOOL m_bInitSplitter;
, вы также должны добавить:
m_bInitSplitter = false;в конструктор ChildFrm.cpp следующий код добавляется в ChildFrm.cpp при добавлении переменной с помощью мастера:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{
}
Поместите следующий код в CChildFrame :: OnCreateClient:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{
CRect cr;
GetWindowRect( &cr );
if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
MessageBox("Error setting up splitter frames!", "Init Error!", MB_OK | MB_ICONERROR);
return FALSE;
}
if (!m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS(CElementView),
CSize(cr.Width()/2, cr.Height()), pContext ) )
{
MessageBox("Error setting up splitter frames!", "Init Error!", MB_OK | MB_ICONERROR);
return FALSE;
}
if (!m_wndSplitter.CreateView( 0, 1, RUNTIME_CLASS(CSampleViewer3dView),
CSize(cr.Width()/2, cr.Height()), pContext))
{
MessageBox("Error setting up splitter frames!", "Init Error!", MB_OK | MB_ICONERROR);
return FALSE;
}
m_bInitSplitter = TRUE;
return TRUE;
}
Добавьте переопределение размера в объявление CChildFrame и вставьте следующий код:
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWnd::OnSize(nType, cx, cy);
CRect cr;
GetWindowRect(&cr);
if (m_bInitSplitter && nType != SIZE_MINIMIZED)
{
m_wndSplitter.SetRowInfo( 0, cy, 0 );
m_wndSplitter.SetColumnInfo(0, cr.Width()*0.25 / 2, 50);
m_wndSplitter.SetColumnInfo(1, cr.Width()*0.75 / 2, 50);
m_wndSplitter.RecalcLayout();
}
}
Можно изменить размер каждого окна, изменив значенияот 0,25 и 0,75 до требуемого процента экрана, который вы хотите, чтобы каждый вид занимал.
Добавьте файлы заголовков для двух представлений в ChildFrm.cpp, например, ElementView.h и SampleViewer3dView.h.
После этого у вас должно быть два независимых представления в дочернем окне программы MDI.