Функції-члени класу 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.