www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  http://tikitak.narod.ru ---- Главная страница сайта

Шаг 24 - Несколько видов для документа

Создание проекта

Этот проект демонстрирует наиболее эффектную сторону технологии документ-вид.

Используем предыдущие проект.

Создаем код

Добавляем описание для класса разделителя
#include "afxwin.h"
#include "afxext.h"
................
Создаем еще один класс просмотра
class CNewView : public CView
{
protected: 
	CNewView();
	DECLARE_DYNCREATE(CNewView)
public:
	void OnDraw(CDC* pDC);
	CMyDoc* GetDocument();
};

CMyDoc* CNewView::GetDocument()
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
	return (CMyDoc*)m_pDocument;
}

void CNewView::OnDraw(CDC* pDC)
{
	CMyDoc* tempDoc=GetDocument();
	pDC->SetTextColor(RGB(255,0,0));
	pDC->TextOut(10,10,tempDoc->GetDate());
}

IMPLEMENT_DYNCREATE(CNewView, CView)

CNewView::CNewView()
{
 
}
Добавляем описания класса и процура для создаия раздедлителя.
class CMainFrame : public CFrameWnd		
{
  ........
public:
  virtual BOOL OnCreateClient( LPCREATESTRUCT lpcs,
              CCreateContext* pContext );
private:
  CSplitterWnd m_wndSplitter;
};
Реализация
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext )
{

 ASSERT(m_wndSplitter.CreateStatic(this,1,2));	
 ASSERT(m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyView),
       CSize(100,50),pContext));	
 ASSERT(m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CNewView),
       CSize(100,50),pContext));
 SetActiveView((CView*)m_wndSplitter.GetPane(0,1));	
 return TRUE;
}

Описание

Описания класса разделителя нет в afxwin.h. Поэтому мы и подключили afxext.h где он есть. Логично?

Создали второй класс просмотра он совершенно аналогичен CMyView за исключением функции рисования. В ней текст выводится красным цветом.

Для использования обьявляем в классе рамки окна, обьект класса разделитель

  CSplitterWnd m_wndSplitter;
OnCreateClient функция ответственна за создание клиента рамки окна, т.е. внутреннего наполения рамки. Вот мы и устанавливаем наполнения как создаем разделитель m_wndSplitter.CreateStatic(this,1,2), который вставляется в рамку (this) и состоит из двух частей 1,2.

К каждой части превязываем просмотр m_wndSplitter.CreateView, указывая класс просмотра , размер и т.д.

В самом конце устанавливаем номер активной панели и сообщаем MFC о успешности нашей работы.

Соберайте и запускайте. Две панели с текстом разного цвета. Выберите пунк меню About и текст поменяется сразу в двух панелях.

А теперь фантазию надо применить. Где это используеться. В Excel точно для просмотра частей таблицы, можно графику просматривать с разными масштабами и т.д.


Шпаргалка

Включить дополнения
#include "afxext.h"
Включить описание класса разделителя в класс рамки окна
class CMainFrame : public CFrameWnd		
{
        ........
	CSplitterWnd m_wndSplitter;
};
Создать классы видов сколько вы хотите.

Переопределить функцию OnCreateClient

class CMainFrame : public CFrameWnd		
{
public:
	virtual BOOL OnCreateClient( LPCREATESTRUCT lpcs,
             CCreateContext* pContext );
        ...........
};
И реализовать разделители
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext )
{

 ASSERT(m_wndSplitter.CreateStatic(this,1,2));	
 ASSERT(m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyView),
          CSize(100,50),pContext));	
 ..............
 SetActiveView((CView*)m_wndSplitter.GetPane(0,1));	
 return TRUE;
}


Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz