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

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.

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