C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 320 - Свой вид на основе CtabCtrl (продолжение) / MFC шаг за шагом / Visual C++

Шаг 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); 
}

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


| |
Автор Каев Артем.
[AD]