Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual1.doc
Скачиваний:
8
Добавлен:
07.03.2016
Размер:
4.35 Mб
Скачать

3.3. Клас документа

Формуючи текст програми за допомогою AppWizard, ви маєте можливість оснастити додаток: панеллю інструментів, рядком стану, різноманітними меню і навіть вікном повідомлення про авторські права. Однак корисність такого додатка дорівнює нулю. Для того щоб створити програму, що не тільки добре виглядає на екрані, але і робить щось корисне, вам доведеться втрутитися в текст програми, яку підготував AppWizard.

Можливо, найбільш істотним змінам піддасться частина підготовленої AppWizard програми, пов'язана з документом - інформацією, яку користувач може зберігати в процесі роботи з додатком і потім зчитувати, - і з видами - засобами подання цієї інформації користувачеві в процесі виконання програми. Покладена в основу MFC концепція документ / вид дозволяє відокремити дані від засобів, за допомогою яких користувач має можливість переглянути ці дані та маніпулювати ними. Коротше кажучи, об'єкти-документи відповідальні за зберігання, завантаження і вивантаження даних, а об'єкти-види, які часом є ті ж вікна, дозволяють користувачеві переглядати дані на екрані і редагувати їх відповідно логіці роботи програми. У цій главі ви познайомитеся з основами роботи MFC в частині реалізації концепції документ / вид.

Створюючи SDI-і MDI-додатки, AppWizard спочатку закладає в них засоби, орієнтовані на реалізацію концепції документ / вид. Це означає, що AppWizard формує клас, похідний від CDocument, і передає йому певні завдання. Він також формує клас виду, похідний від CView, якому передає інші завдання. Давайте замовимо AppWizard простий додаток і подивимося, що він нам видасть.

Виберіть File → New, потім вкладку Projects. Встановіть ім'я проекту Арр1 та відповідні каталоги для файлів проекту. Перевірте, щоб був обраний варіант MFC AppWizard (ехе) у лівому вікні. Клацніть на ОК.

Пройдіться по всім діалоговим вікнам AppWizard, замовляючи установки відповідно до наведеного нижче списком і кожен раз клацаючи на Next.

Етап 1. Виберіть Multiple documents.

Етап 2. Не міняйте налаштувань, запропонованих AppWizard за замовчуванням.

Етап 3. Не міняйте налаштувань, запропонованих AppWizard за замовчуванням.

Етап 4. Скиньте всі прапорці, крім Printing and print preview (Друк і попередній перегляд роздруківки).

Етап 5. Не міняйте налаштувань, запропонованих AppWizard за замовчуванням.

Етап 6. Не міняйте налаштувань, запропонованих AppWizard за замовчуванням.

На останньому етапі клацніть на кнопці Finish, і параметри виконаних налаштуваннь будуть виведені у вікні New Project Information (Інформація про новий проект). Після клацання на кнопці OK ClassWizard сформує проект. У вікні ClassView перегляньте список класів додатку. Створено шість класів: CAboutDlg, CApp1App, САрр1Dос, CApp1View, CChildFrame та CMainFrame.

Клас САрр1Dос представляє, документ і містить структуру даних, якими може оперувати додаток. Організувати зберігання даних у класі можна включенням до нього відповідних членів-змінних. Текст файлу заголовка, який AppWizard сформував для класу CApp1Doc:

// App1Doc.h : інтерфейс класа CApp1Doc.

//

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

#if !defined(AFX_APP1D0C_H__43BB481D_64AE_11D0_9AF3_0080C81A397C__INCLUDED_)

#define AFX_APP1D0C_H__43BB481D_64AE_11D0_9AF3_0080C81A397C__INCLUDED_

class CApp1Doc : public CDocument

{

protected: // Создаются только в случае сохранения-восстановления.

CApp1Doc();

DECLARE_DYNCREATE(CApp1Doc)

// Атрибути.

public:

// Операції.

public:

// Перевантаження.

// Перевантажені віртуальні функції,

// сформовані ClassWizard-ом.

//{{AFX_VIRTUAL(CApp1Doc)

public:

virtual BOOL OnNewDocument();

virtual void Serialize(CArchive& ar);

//}}AFX_VIRTUAL

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

public:

virtual ~CApp1Doc();

#ifdef _DEBUG

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

#endif

protected:

// Карта повідомлень.

protected:

//{{AFX_MSG(CApp1Doc)

// УВАГА!! Тут ClassWizard буде додавати і

// видаляти функції-члени.

// не редагуйте текст у цих блоках!

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

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

//{{AFX_INSERT,LOCATION}}

// Microsoft Visual C++ буде вставляти додаткові

// оголошення перед попереднім рядком.

#end if // !defined(AFX_APP1D0C_H__43BB481D_64AE_11D0_9AF3_0080C81A397C__INCLUDED_)

Майже на самому початку класу є секція Атрибути, за якою слідує ключове слово publiс. Саме тут вам і потрібно буде вставити оголошення членів-змінних, в яких планується зберігати дані програми. Наприклад в додатку потрібно буде зберігати масив об'єктів класу СРоint. Цей масив оголошується як член класу документа:

// Атрибути.

publiс:

СРоint m_points[100];

CPoint – це клас MFC, який інкапсулює інформацію, що має відношення до точки на екрані, зокрема - координати цієї точки x і y.

У тексті файлу заголовка зверніть увагу також на те, що клас САрр1Dос має дві віртуальні функції-члени - OnNewDocument() і Serialize(). MFC викликає функцію OnNewDocument(), як тільки користувач вибере команду File → New (або відповідну піктограму на панелі інструментів, якщо така є присутньою у додатку). Цю функцію можна використовувати для виконання всіх ініціалізацій, необхідних новій порції даних. У SDI-додатку в такому випадку закривається відкритий документ і новий порожній документ завантажується в той же самий об'єкт класу. У MDI-додатку відкривається новий порожній документ (створюється новий екземпляр класу документа) на додаток до вже існуючого. Функція Serialize() використовується для завантаження в файл і вивантаження з нього даних, що зберігаються в членах-змінних об'єкта класу документа. Про це більш детально буде розказано у розділі 7.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]