Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабробС++1к.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.06 Mб
Скачать

Lab4View.H та lab4View.Cpp

// LAB4eView.h : інтерфейс класу CLAB4View

#if !defined(AFX_WELCOMEVIEW_H__AF072C8B_900A_11D0_8860

_444553540000__INCLUDED_)

#define AFX_WELCOMEVIEW_H__AF072C8B_900A_11D0_8860

_444553540000__INCLUDED_

#if _MSC_VER >= 1000

#pragma once

#endif // _MSC_VER >= 1000

class CLAB4View : public CView

{protected: // створення тільки при серіалізації

CLAB4View();

DECLARE_DYNCREATE(CLAB4View)

// Атрибути

public:

CLAB4Doc* GetDocument();

// Операції

public:

// Перевизначення

// Перевизначення віртуальних функцій, згенеровані ClassWizard

//{{AFX_VIRTUAL(CLAB4View)

public:

virtual void OnDraw(CDC* pDC);// перевизначається для рисування у поточному вигляді

virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

protected:

virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

virtual void OnBeginPrinting(CDC* pDC,

CPrintInfo* pInfo);

virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

//}}AFX_VIRTUAL

// Реалізація

public:

virtual ~CLAB4View();

#ifdef _DEBUG

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

#endif

protected:

// Згенеровані функції схеми повідомлень

protected:

//{{AFX_MSG(CLAB4View)

// Тут ClassWizard вставляє та видаляє функції класу.

// Не можна змінювати вміст даних блоків згенерованого коду!

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

#ifndef _DEBUG // відладочна версія - в welcomeView.cpp

inline CLAB4Doc* CLAB4View::GetDocument()

{ return (CLAB4Doc*)m_pDocument; }

#endif

//{{AFX_INSERT_LOCATION}}

// Microsoft Developer Studio вставляє додаткові оголошення перед попереднім рядком.

#endif // !defined(AFX_ LAB4VIEW_H__AF072C8B_900A_11D0

// _8860_444553540000__INCLUDED_)

// LAB4View.cpp : реалізація класу CLAB4View

//#include “stdafx.h”

#include “LAB4.h”

#include “LAB4Doc.h”

#include “LAB4View.h”

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

// CLAB4View

IMPLEMENT_DYNCREATE(CLAB4View, CView)

BEGIN_MESSAGE_MAP(CLAB4View, CView)

//{{AFX_MSG_MAP(CWelcomeView)

// Тут ClassWizard додає та видаляє макроси схеми.

// Не можна змінювати вміст даних фрагментів згенерованого коду!

//}}AFX_MSG_MAP

// Стандартні команди друку

ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW,

CView::OnFilePrintPreview)

END_MESSAGE_MAP()

// Створення/знищення CLAB4View

CLAB4View::CLAB4View()

{ // TODO: додайте код конструктора

}

CLAB4View::~CLAB4View()

{

}

BOOL CLAB4View::PreCreateWindow(CREATESTRUCT& cs)

{ // TODO: Змініть клас вікна чи його стилі, редагуючи вміст CREATESTRUCT cs

return CView::PreCreateWindow(cs);

}

// Рисування у CLAB4View

void CLAB4View::OnDraw(CDC* pDC)

{ CLab4Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(20,20,pDoc->m_nach);

CString s;

Cdialogg pc;

pc.DoModal();

s.Format("a=%d 2*a=%d",pc.m_a,2*pc.m_a);

pDC->TextOut(20,40,s);

pDC->TextOut(20,60,pDoc->m_kin);

}

// Друк у C LAB4View

BOOL C LAB4View::OnPreparePrinting(CPrintInfo* pInfo)

{ // Стандартна підготовка

return DoPreparePrinting(pInfo);

}

void CLAB4View::OnBeginPrinting(CDC* /*pDC*/,

CPrintInfo* /*pInfo*/)

{ // TODO: додайте додаткове ініціювання перед друком

}

void CLAB4View::OnEndPrinting(CDC* /*pDC*/,

CPrintInfo* /*pInfo*/)

{

// TODO: додайте код для "збирання сміття" після друку

}

// Діагностика у CLAB4View

#ifdef _DEBUG

void CLAB4View::AssertValid() const

{

CView::AssertValid();

}

void CLAB4View::Dump(CDumpContext& dc) const

{

CView::Dump(dc);

}

CLAB4Doc* CWelcomeView::GetDocument()

// невідладочна версія є вбудовваною

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS

(CLAB4Doc)));

return (CLAB4Doc*)m_pDocument;

}

#endif //_DEBUG

// Обробники повідомлень CLAB4View

Об’єкт вигляду відображає дані програми, і ці дані найчастіше зберігаються у об’єкті документу.

Розглянемо об’єкт документа

У об’єкті документу зберігаються дані програми. У прикладі LAB4 створювалися об’єкти m_роch та m_kin..

// LAB4Doc.h : інтерфейс класу CLAB4Doc

#if !defined(AFX_WELCOMEDOC_H__AF072C89_900A_11D0_8860

_444553540000__INCLUDED_)

#define AFX_WELCOMEDOC_H__AF072C89_900A_11D0_8860

_444553540000__INCLUDED_

#if _MSC_VER >= 1000

#pragma once

#endif // _MSC_VER >= 1000

class CLAB4Doc : public CDocument

{

protected: // create from serialization only

CLAB4Doc();

DECLARE_DYNCREATE(CLAB4Doc)

CString m_роch, m_kin;

.

}

Потім потрібно ініціювати об’єкти m_роch та m_kin у конструкторі класу документу, розташованому у файлі Lab4Doc.cpp:

CLab4Doc::CLab4Doc()

{

m_роch="Vvedeni dani";

m_kin="Result obrobki";

}

Дані зберігаються у об’єкті документу та готові до використання, потрібно звернутися до них з об’єкту вигляду.

Звернення до документа з обліку

Код, згенерований AppWizard для класу вигляду, містить фрагмент, призначений для отримання вказівника на об’єкт документу за допомогою методу GetDocument() класу вигляду. AppWizard надав цьому вказівнику ім’я pDoc:

void CLab4View::OnDraw(CDC* pDC)

{

CLab4Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

.

.

. pDC->TextOut(0, 0, pDoc-> m_роch); //звернення до змінних, розташованих у CLab4Doc

}

Рядок ASSERT_VALID (pDoc) - це макрос, який перевіряє, щоб все прошло нормально і отриманим вказівником на документ можна скористатися ( макросом називається набір раніше написаних команд C++).

При такому незначному об’ємі даних можна було записати їх у об’єкті вигляду. Проте для зберігання даних у документі є одна, дуже важлива причина - можливість записати їх на диск і потім прочитати. Розглянемо, як це робиться.

Збереження даних на диску

У вхідному файлі документу, Lab4Doc.cpp є метод Serialize():

void CLab4Doc::Serialize(CArchive& ar)

{

if (ar.IsStoring())

{

// TODO: додайте код зберігання даних

}

else

{

// TODO: додайте код завантаження даних

}

}

В меню програми передбачені кілька вбудованих команд меню для роботи з файлами: Save, Save As та Open. Програма виконує майже всю роботу по збереженню файла на диску, але потрібно змінити її текст таким чином, щоб вона зберігала і об’єкти m_роch та m_kin.

Методу Serialize() передається об’єкт з іменем ar; з ним можна працювати так же, як і з потоком cout у консольному режимі роботи Visual C++. Наприклад, для збереження об’єкту m_роch при запису даних на диск та для його наступного читання при завантаженні даних з диску потрібно додати такий фрагмент:

void CLab4Doc::Serialize(CArchive& ar)

{

if (ar.IsStoring())

{

ar << m_роch;

//ar<<m_kin;

}

else

{

ar >> m_роch;

//ar>>m_kin;

}

}

Тепер користувач може зберегти документ на диску та завантажити його звідти. Вхідний текст об’єкту документу знаходиться у файлах Lab4Doc.h та Lab4Doc.cpp.

Lab4Doc.h та Lab4Doc.cpp

// Lab4Doc.h : інтерфейс класу CLab4Doc

#if !defined(AFX_WELCOMEDOC_H__AF072C89_900A_11D0_8860

_444553540000__INCLUDED_)

#define AFX_WELCOMEDOC_H__AF072C89_900A_11D0_8860

_444553540000__INCLUDED_

#if _MSC_VER >= 1000

#pragma once

#endif // _MSC_VER >= 1000

class CLab4Doc : public CDocument

{

protected: // створення тільки при серіалізації

CLab4Doc();

DECLARE_DYNCREATE(CLab4Doc)

// Атрибути

public:

// Операції

public:

// Перевизначення

// Перевизначення віртуальних функцій, згенеровані ClassWizard

//{{AFX_VIRTUAL(CLab4Doc)

public:

virtual BOOL OnNewDocument();

virtual void Serialize(CArchive& ar);

//}}AFX_VIRTUAL

// Реалізація

public:

virtual ~CLab4Doc();

#ifdef _DEBUG

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

#endif

protected:

// Згенеровані функції схеми повідомлень

protected:

//{{AFX_MSG(CLab4Doc)

// Тут ClassWizard вставляє та видаляє функції класу.

// Не можна змінювати вміст даних фрагментів згенерованого коду!

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

//{{AFX_INSERT_LOCATION}}

// Microsoft Developer Studio вставляє додаткові оголошення перед попереднім рядком.

#endif // !defined(AFX_WELCOMEDOC_H__AF072C89_900A_11D0

// _8860_444553540000__INCLUDED_)

// Lab4Doc.cpp : реалізація класу C Lab4Doc

#include “stdafx.h”

#include “Lab4.h”

#include “Lab4Doc.h”

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

// Cab4Doc

IMPLEMENT_DYNCREATE(CLab4Doc, CDocument)

BEGIN_MESSAGE_MAP(CLab4Doc, CDocument)

//{{AFX_MSG_MAP(CLab4Doc)

// Тут ClassWizard додає та видаляє макроси схеми.

// Не можна змінювати вміст даних фрагментів згенерованого коду!

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

// Створення/знищення CLab4Doc

CLab4Doc::CLab4Doc()

{

// TODO: додайте код конструктора

}

CLab4Doc::~CLab4Doc()

{

}

BOOL CLab4Doc::OnNewDocument()

{

if (!CDocument::OnNewDocument()) return FALSE;

// TODO: додайте код для повторного ініціювання документу (документи SDI будуть

// використовувати його повторно

return TRUE;

}

// Серіалізація у CLab4Doc

void CLab4Doc::Serialize(CArchive& ar)

{ if (ar.IsStoring())

{ // TODO: додайте код збереження даних

}

else

{

// TODO: додайте код завантаження даних

}

}

// Діагностика у CLab4Doc

#ifdef _DEBUG

void CLab4Doc::AssertValid() const { CDocument::AssertValid(); }

void CLab4Doc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); }

#endif //_DEBUG

///////////////////////////////////////////////////////////

// Команди CLab4Doc