69284

Клас CDocument

Лекция

Информатика, кибернетика и программирование

Клас CDocument забезпечує стандартну поведінка об’єктів документа додатку MFC. Клас CDocument дозволяє створювати нові документи, зберігати дані документа на диску (сериализация), забезпечувати стандартну взаємодію між об’єктом документа і вікном уявлення...

Украинкский

2014-10-02

49 KB

0 чел.

Лекція № 4

Тема: Клас CDocument

План

  1.  Клас CDocument
  2.  Оголошення класу документа
  3.  Функції-члени класу CDocument

Клас CDocument

Клас CDocument забезпечує стандартну поведінка об'єктів документа додатку MFC. Клас CDocument дозволяє створювати нові документи, зберігати дані документа на диску (сериализация), забезпечувати стандартну взаємодію між об'єктом документа і вікном уявлення, а також виконувати ряд Інших маніпуляцій. Серед класів MFC існує також ряд інших класів, похідних від CDocument, які реалізують спеціалізовані функціональні можливості деяких типів додатків. Наприклад, такі класи MFC, як CRecordset і CDAORecordset, дозволяють істотно спростити створення уявлень в додатках баз даних. Відносини між документом і уявленнями проілюстровані на мал.

Мал. Відносини "один до багатьом" між

документом і його уявленнями

Оголошення класу документа

Якщо для створення додатку використовується майстер AppWizard, то, часто, про оголошення базового класу документа можна не турбуватися — майстер AppWizard зробить це сам. Проте, розуміння поведінки класу CDocument може стати в нагоді, оскільки складнішим застосуванням може знадобитися декілька різних класів документа, похідних від базового класу CDocument. Крім того, розуміючи поведінку класу CDocument, легко модифікувати заготівку додатку, створену за допомогою майстра AppWizard.

Незалежно від того, чи створюється додаток однодокументного інтерфейсу або багатодокументного, майстер AppWizard створює лише один клас документа, похідний від базового класу MFC CDocument.

При створенні простого додатку MFC модифікації класу документа, наданого майстром AppWizard, часто вельми незначні. Іноді досить додати в клас декілька змінних-членів і функцій, що забезпечують доступ до цих змінних з інших частин програми.

Наприклад, об'єкт документа для простого додатку зв'язку (такого як емулятор терміналу) міг би містити змінні-члени для зберігання параметрів модему. В цьому випадку в змінних-членах могла б зберігатися така інформація, як номер телефону, швидкість передачі, парність, кількість битий в кожному сегменті передачі і так далі Таким чином, в класі документа, похідному від класу CDocument, параметри установки зв'язку можна легко представити у вигляді набору простих змінних-членів, як показано в наступному фрагменті коди:

class CSimpleTermDoc : public CDocument

{

protected:

CSimpleTermDoc();

DECLAREJ3YNCREATE(CSimpleTermDoc)

public:

CString m_sPhoneNum;

DWORD m_dwTransSpeed;

WORD m_nTransParity;

WORD m_nTransBits;

DWORD m_dwConnectTime;

Оголосивши змінні-члени, необхідно упевнитися, що програма ініціалізувала змінні деякими початковими значеннями. Для цього використовується функція-член OnNewDocument класу CSimpleTermDoc. Крім того, у функцію Serialize необхідно додати додатковий код, для правильного збереження значень змінних. Код функцій-членів OnNewDocument і Serialize такого застосування міг би виглядати так, як приведено нижче. У цьому фрагменті коди змінні-члени ініціалізувалися.

// Стандартний код для функцій-членів

// OnNewDocument () і Serialize()

BOOL CSimpleTerraDoc::OnNewDocument 

{

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

m_sPhoneNum = _T ("555-1212");

m_dwTransSpeed = 28800;

m_nTransParity = 0;

m_nTransBits = 8;

m_dwConnectTime = 0;

return TRUE;

}

Як можна відмітити в наступному фрагменті коди, в процесі збереження (сериа-лизации serialization) використовується клас CArchive. Цей клас дозволяє легко записувати на диск і прочитувати з нього складні типи даних, використовуючи операторів C++ << (extraction — витягання) і >> (insertion — вставка). При виклику код функції CArchive: :IsStoring спочатку перевіряє, чи є поточний процес операцією читання або запису. На підставі повертаного значення (true при записі, false при читанні) ухвалюється рішення про застосування операторів витягання або збереження даних.

void CSimpleTermDoc::Serialize(CArchive &ar)

{

if (ar.IsStoring())

{

ar << m_sPhoneNum;

ar « m_dwTransSpeed;

ar « m__nTransParity;

ar << m_nTransBits;

ar << m_dwConnectTime;

} else {

ar » m_sPhoneNum;

ar » m_dwTransSpeed;

ar » m_nTransParity;

ar » m_nTransBits;

ar >> m dwConnectTime;

}

}

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

Функції-члени класу CDocument

Окрім функцій ініціалізації і збереження клас CDocument володіє ще декількома функціями-членами, якими в додатках доводиться користуватися достатньо часто. Один набір функцій-членів забезпечує доступ до пов'язаних з документом об'єктів уявлення. Кожен об'єкт документа, який використовується в додатку, має список пов'язаних з ним об'єктів уявлення. Щоб отримати ітератор (iterator) для цього списку, необхідно викликати функцию-член GetFirstViewPosition об'єкту даного документа'. Отриманий ітератор матиме тип POSITION.

З цієї точки зору клас CDocument є класом колекції, що містить інформацію про колекцію уявлень, пов'язаних з ним через об'єкт POSITION. Значення типу даних POSITION застосовуються в бібліотеці MFC перш за все для класів колекцій. Коли в додатку необхідно перебрати список або колекцію, спочатку запрошують ітератор, вказуючий на перший елемент в списку класу колекції, а потім використовують функцію ітератора, яка дозволяє дістати доступ до самих елементів списку. Доступ здійснюється послідовно, один елемент за іншим. Отже, отримавши за допомогою функції-члена GetFirstViewPosition ітератор на перший об'єкт уявлення в класі, можна, послідовно викликаючи функцию-член GetNextView, дістати доступ до решти всіх уявлень в колекції.

Іншими словами, для доступу до всіх уявлень, зв'язаних в додатку з даним об'єктом документа, використовується код, який виглядає таким чином:

POSITION posView = GetFirstViewPosition{);

while {posView != NULL)

{

CView *pView = GetNextView(posView);

// Що-небудь зробити із застосуванням покажчика на уявлення

}

Проте, існує і більш простій спосіб зробити це. Наприклад, якщо код додатку повинен повідомляти всі уявлення документа про зміну інформації, що міститься в нім, то модифікувати уявлення можна і без застосування ітератора з відповідним циклом — досить викликати функцию-член об'єкту документа UpdateAllViews. Крім того, можна навіть вказати специфічні для цього додатку дані, при зміні яких необхідно модифікувати лише частину вікон уявлення при виклику функції UpdateAllViews. Докладніша інформація про вибіркове оновлення вікон приводиться далі в цьому розділі при обговоренні застосування функції-члена CView: :OnUpdate.

Решта функцій-членів, пов'язаних з представленням об'єкту документа (такі як AddView і RemoveView), використовується значно рідше. Як і виходить з їх імен (додати уявлення, видалити уявлення), функції дозволяють програмно додавати і видаляти уявлення із списку уявлень документа. Ці функції застосовуються дуже рідко, оскільки більшість розробників використовують стандартну реалізацію f MFC з невеликими змінами (або навіть без всяких змін).

При кожній зміні даних документа (внесених користувачем або внутрішніми h процесами додатку) програма повинна викликати функцию-член SetModif iedFlag. Своєчасне застосування функції SetModif iedFlag гарантує, що додаток MFC ' повідомить користувача про можливість втрати внесених змін, якщо він спробує закрити додаток, не зберігши документ. Якщо таку стандартну поведінку необхідно змінити і створити власну функцію збереження, то значення прапора стану можна набути за допомогою функції-члена IsModif ied.

Функція-член SetTitle дозволяє встановити заголовок об'єкту документа. Додаток, у свою чергу, відобразить встановлений заголовок в заголовку фреймового вікна (основного в додатку SDI або дочерних в додатку MDI).

 Функція SetPathName дозволяє встановити повний шлях до файлу документа, а функція GetPathName — отримати його. І нарешті, отримати шаблон документа, використовуваний додатком при створенні даного документа, можна за допомогою функції GetDocTemplate.


 

А также другие работы, которые могут Вас заинтересовать

42317. ДОСЛIДЖЕННЯ РЕЖИМIВ РОБОТИ ГРАФОПОБУДУВАЧА 31.5 KB
  Ознайомитися з принципом дї та системою команд графопобудувача HPGLдод. Дослiдити роботу графопобудувача в режимі емуляції. Принципи дiї та основнi команди графопобудувача.
42318. Использование шаблонов при создании презентаций 191 KB
  На панели задач щелкните на кнопке Пуск Strt. В стартовом диалоговом окне щелкните на кнопке выбора Шаблон презентации Templte и затем на кнопке ОК. Примечание: Если вы продолжаете сеанс работы после предыдущего урока щелкните на меню Файл File и затем на команде Создать New. Щелкните на вкладке Дизайны презентаций Presenttion Designs.
42319. Информационные системы и системы управления базами данных 2.77 MB
  Информационные системы и системы управления базами данных Введение Информационные системы взаимодействия видов транспорта ИСВВТ отличаются от других информационных систем ИС в основном решаемыми задачами. Поэтому в основе любой из них лежит среда хранения обработки и доступа к данным база данных;  информационные системы ориентируются на конечного пользователя не обладающего высокой квалификацией в области применения вычислительной техники. Системы управленя базами данных Любая ИС оперирует информацией о той...
42320. Базы данных реляционных и объектно-реляционных СУБД 1.19 MB
  Рассмотрим смысл этих понятий на примере отношения таблицы СТУДЕНТЫсодержащего информацию о студентах некоторого вуза табл. Тип данных определяет диапазон значений которые можно сохранить в переменной или столбце таблицы отношения а также набор операций разрешенных для данных этого типа. Например предположим что в БД кроме таблицы СТУДЕНТЫ Табл. Допустим что столбец Имя таблицы СТУДЕНТЫ и столбец ФИО таблицы ПРЕПОДАВАТЕЛИ имеют одинаковые типы данных максимальную длину в обоих столбцах используется кириллица и смысл...
42321. Архитектура баз данных и способы доступа к ним в пакете Delphi 361.5 KB
  Архитектура баз данных Современная система управления базами данных такая как InterBse SQL Server пакета Delphi или Microsoft SQL Server 2000 может поддерживать хранение и обработку множества баз данных к которым одновременно могут обращаться множество пользователей. Прежде чем учиться управлению этими базами данных познакомимся с их структурой то есть с представлением базы данных на логическом и физическом уровнях. При этом будет рассмотрен список объектов поддерживаемых базами данных InterBse SQL Server 6 сокращённо...
42322. Операции с базой данных 238.5 KB
  Операции с базой данных Цель работы Изучить операции с базами данных в целом. Получить навыки использования приложения IBExpert для создания удаления регистрации подключения извлечения метаданных резервного копирования и восстановления базы данных СУБД Firebird. Изучить SQLоператоры для создания подключения и удаления базы данных. Исходные данные Студент получает индивидуальный вариант исходных данных который используется при выполнении всех лабораторных работ.
42323. Домены. SQL-операторы для работы с доменами 135.5 KB
  Домены Цель работы Изучить типы данных Firebird. Исходные данные Вариант исходных данных с кратким описанием предметной области получен студентом при выполнении первой лабораторной работы. Эта модель стала революционным событием в развитии баз данных . Элементы реляционной модели данных и формы их представления приведены в таблице 1.
42324. Таблицы. SQL-операторы для работы с таблицами и индексами 197.5 KB
  Изучить способы создания изменения и удаления таблиц. Теоретические сведения Таблицы Tbles Firebird – реляционная СУБД поэтому все данные в Firebird хранятся в виде двумерных таблиц со строками и столбцами. Основные ограничения которым должны удовлетворять таблицы: Каждый столбец в таблице имеет уникальное имя. Первичный ключ это столбец который выбран для уникальной идентификации записей базы данных строк таблицы.
42325. Технология создания простейшей информационной системы 8.22 MB
  База данных должна содержать две таблицы: Товары и Приход товаров. Таблицы оперативной части ИС предназначены для работы с оперативной информацией значение которой актуально обычно только в течение короткого времени от момента поступления такой информации до момента окончания её обработки. Рабочая структура таблиц приведена ниже: Таблица Товары Название поля Смысл Тип Длина Tovr Наименование товара Строка 20 EdIzm Единица измерения Строка 10 Zen Цена за единицу измерения Целочисленный Таблица Приход товаров Название поля...