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

Шаг 22 - Организуем связь докумен-вид

" Войди в меня , войди в мои сны
  Войди в мои сны они так важны "
	Ирина Алегрова
 К Документ - Вид подходит очень.

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

Проект остается, но весь код я приведу опять. Дело в том, что для реализации связи документ-вид, класс документа должен быть обявлен первым. Все изменения я выделил жирным.

Создаем код

#include "afxwin.h"
#include "resource.h"

class CMyDoc : public CDocument	
{
protected:
	CMyDoc();
	DECLARE_DYNCREATE(CMyDoc)
public:
	CString GetDate();
private:
	CString csDate;
};

IMPLEMENT_DYNCREATE(CMyDoc,	CDocument)

CMyDoc::CMyDoc()
{
	csDate="Hello View - Doc";
}

CString CMyDoc::GetDate()
{
	return csDate;
}

class CMyView : public CView
{
protected: 
	CMyView();
	DECLARE_DYNCREATE(CMyView)
public:
	void OnDraw(CDC* pDC);
	CMyDoc* GetDocument();
};


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


void CMyView::OnDraw(CDC* pDC)
{
	CMyDoc* tempDoc=GetDocument();
	pDC->TextOut(10,10,tempDoc->GetDate());
}

IMPLEMENT_DYNCREATE(CMyView, CView)

CMyView::CMyView()
{
}


class CMainFrame : public CFrameWnd
{
protected:
	CMainFrame();
	DECLARE_DYNCREATE(CMainFrame)
public:
};

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

CMainFrame::CMainFrame()
{
}

class CStep2App : public CWinApp
{
public:
	CStep2App();
	virtual BOOL InitInstance();
};

BOOL CStep2App::InitInstance()
{
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CMyDoc),
		RUNTIME_CLASS(CMainFrame),
		RUNTIME_CLASS(CMyView));
	AddDocTemplate(pDocTemplate);
	CCommandLineInfo cmdInfo;
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();
	return TRUE;
}

CStep2App::CStep2App()
{
}

CStep2App theApp;

Описание

В классе документа должны находится данные. Вот мы их и обьявили в виде строки CString csDate. Так как данные должны быть защищены то я их поместил в private: это соотвествует правилам классического программирования (ООП). Для доступа создал функцию CString GetDate(). С ней я думаю просто, она возвращает строку.

Вид должен иметь возможность доступа к документацию. Для этого создана функция СMyDoc* GetDocument(); в классе вида. Она возвращает указатель на класс документа. Именно указатель нам и нужен.

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc))); Вобщем по русcки это так. Проверить принадлежность указателя m_pDocument на принадлежность классу CMyDOC IsKindOf(RUNTIME_CLASS(CMyDoc)) и проверить чтобы этот класс существовал ASSERT(.....)

Если все нормально вернуть указатель на класс документа - return (CMyDoc*)m_pDocument;

И изменили функцию прорисовки OnDraw. В этой функции мы получаем класс документа и выводим на экран строку.

Так вот, вникайте. Если вы захотите изменить вывод допустим шрифт букв, или место строки, то за всё это отвечает класс просмотра CView, а если необходимо изменить содержание строки то это делается в классе документа CDocument.


Шпаргалка

В классе документа создай данные и доступ к ним.
class CMyDoc : public CDocument	
{
         ..................
public:
	CString GetDate();
private:
	CString csDate;
};
В классе вида реализуй доступ к классу документа
class CMyView : public CView
{
     ..........
    CMyDoc* GetDocument(); 
     ..........
}
;
CMyDoc* CMyView::GetDocument()
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
	return (CMyDoc*)m_pDocument;
}
Создай функцию рисования вида
void CMyView::OnDraw(CDC* pDC)
{
	CMyDoc* tempDoc=GetDocument();
	pDC->TextOut(10,10,tempDoc->GetDate());
}


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

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

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

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