Шаг 320 - Свой вид на основе CtabCtrl (продолжение)

Давайте усложним пример. Сделаем вот что. Нам нужно будет получить вот такое приложение:

320_1.gif (3755 b)

Думаю Вам будет интересно как это сделать. Делаем новое приложение MFC AppWizard. С именем TestE. Пусть приложение будет SDI. Я вам раньше советовал сохранить класс в галерею компонентов. Сейчас просто нужно класс вставить.

320_2.gif (4059 b)

О том как разделяется окно на два фрейма со своими видами мы уже говорили: "Шаг 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

Если сейчас запустить приложение, то вид у него будет такой:

320_3.gif (2613 b)

А нам надо на все окно. Это решается легко. Там нужно перегрузить метод OnSize() нашего класса:

void CTabView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	if (IsWindow(cTab)) cTab.MoveWindow(0,0,cx,cy); 
}

С этого момента все станет нормально как на первой картинке.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.02.2001