- •1А. Побудова проекту додатка без майстра.
- •1Б. Побудова windows-додаткa за допомогою майстра
- •2. Розробка windows-додатку з діалоговим вікном
- •3.Програмування простих арифметичних виразів
- •Завдання до лабораторної роботи:
- •4.Створення файлів даних
- •Void cMyAppView::OnDraw(cdc* pDc)
- •Використання постійних наборів даних. Серіалізація
- •6.Робота з клавіатурою та мишою.
- •Void cLab6View::OnChar(uint nChar, uint nRepCnt, uint nFlags)
- •Void cLab6View::OnChar(uint nChar, uint nRepCnt, uint nFlags)
- •Void cLab6View::OnDraw(cdc* pDc)
- •Void cCenteredView::OnDraw(cdc* pDc)
- •Void cLab6View::OnDraw(cdc* pDc)
- •Void cLab6View::OnDraw(cdc* pDc)
- •If(!CaretCreated)
- •Void cLab6View::OnKillFocus(cWnd* pNewWnd)
- •Void cLab6View::OnSetFocus(cWnd* pOldWnd)
- •7.Обробка текстових даних.
- •Void cTextView::OnDraw(cdc* pDc)
- •8.Обробка одномірних масивів.
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •9. Обробка двомірних масивів.
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •10. Функції. Перевантаження та шаблони функцій.
- •Додаток1.Пояснення архітектури документ/облік
- •Додаток2.Аналіз коду, створеного майстром у lab4
- •MainFrm.H и MainFrm.Cpp
- •Lab4View.H та lab4View.Cpp
- •Список літератури
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
