Давайте усложним пример. Сделаем вот что. Нам нужно будет получить вот такое приложение:
Думаю Вам будет интересно как это сделать. Делаем новое приложение MFC AppWizard. С именем TestE. Пусть приложение будет SDI. Я вам раньше советовал сохранить класс в галерею компонентов. Сейчас просто нужно класс вставить.
О том как разделяется окно на два фрейма со своими видами мы уже говорили: "Шаг 24 - Несколько видов для документа". Заводим класс разделителя:
...... class CMainFrame : public CFrameWnd { protected: // create from serialization only CMainFrame(); DECLARE_DYNCREATE(CMainFrame) // Attributes public: CSplitterWnd m_wndSplitter; // Operations public: ...... };
И организуем разделитель, перегрузив функцию OnCreateClient():
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class if (!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE; if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTabView), CSize(100, 100), pContext) || !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CTestEView), CSize(100, 100), pContext)) { m_wndSplitter.DestroyWindow(); return FALSE; } return TRUE; }
Только нужно определить заголовочные файлы:
// MainFrm.cpp : implementation of the CMainFrame class // #include "stdafx.h" #include "TestE.h" #include "TestEDoc.h" #include "TabView.h" #include "TestEView.h" #include "MainFrm.h" #ifdef _DEBUG
Если сейчас запустить приложение, то вид у него будет такой:
А нам надо на все окно. Это решается легко. Там нужно перегрузить метод OnSize() нашего класса:
void CTabView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); if (IsWindow(cTab)) cTab.MoveWindow(0,0,cx,cy); }
С этого момента все станет нормально как на первой картинке.