69285

Документи і обробка повідомлень

Лекция

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

Одне з найбільш важливих достоїнств документа в тому, що об’єкт CDocument не пов’язаний з вікном безпосередньо. Проте, саме об’єкт CDocument і є адресатом передаваних команд. Отже, цей об’єкт може отримувати повідомлення від операційної системи. Відповідальність за передачу повідомлень...

Украинкский

2014-10-02

34.5 KB

0 чел.

Лекція № 5

Тема: Документи і обробка повідомлень

План

  1.  Документи і обробка повідомлень
  2.  Перевизначення віртуальних функцій документа

Документи і обробка повідомлень

Одне з найбільш важливих достоїнств документа в тому, що об'єкт CDocument не пов'язаний з вікном безпосередньо. Проте, саме об'єкт CDocument і є адресатом передаваних команд. Отже, цей об'єкт може отримувати повідомлення від операційної системи. Відповідальність за передачу повідомлень з операційної системи в об'єкт документа несуть об'єкти уявлення, що асоціюються з об'єктом CDocument.

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

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

На практиці розділення обов'язків між документом і уявленням, як правило, спрощує обробку команд. Наприклад, якщо додаток забезпечує виконання команди Save (Зберегти), що віддається користувачем при необхідності збереження даних об'єкту, то виконувати її повинен саме документ, оскільки команда має відношення до самих даних, а не до їх відображення.

З іншого боку, якщо додаток підтримує команду Copy (Копіювати), яку користувач зазвичай віддає за допомогою контекстного меню при необхідності копіювання даних з екрану, то виконувати її повинен, ймовірно, об'єкт уявлення. Таким чином, якщо документ володіє декількома уявленнями, то дані, скопійовані в одному з уявлень, можуть істотно відрізнятися від даних другого. Тому, для кожного уявлення пов'язаного з документом, обробка команди Copy повинна виконуватися по-своєму.

Відмінності цілком очевидні — в першому зберігаються дані документа, а в другому копіюються дані уявлення. Але, існують і проміжні випадки. Хороший приклад — команда Paste (Вставити). Питання про те, чи повинен виконувати команду Paste клас документа або клас уявлення, складніший, оскільки дана команда впливає на весь документ в цілому. Це пов'язано з тим, що дані необхідно вставити в сам документ а не просто в окреме уявлення. З іншого боку, поточне уявлення також може істотно вплинути на результат вставки інформації в документ. Наприклад, команда Paste може замінити вже існуючий текст, виділений зараз в уявленні. Іншими словами, рішення про той, хто саме (об'єкт документа або об'єкт уявлення) повинен виконувати дії цього типу, залежить від конкретного проекту додатку. В більшості випадків, це саме те рішення, яке необхідно обдумати особливо ретельно.

Але найцікавіше, що деякі команди доводиться відпрацьовувати не в класі документа і не в класі уявлення, а в коді самого фреймового вікна. Чудовим прикладом такої команди, що виконується безпосередньо усередині фреймового вікна, є команди на відображення і заховання панелей інструментів. Наявність або відсутність панелі інструментів ніяк не впливає ні на дані документа, ні на його уявлення. Це швидше завдання конфігурації, що впливає на все застосування в цілому.

Перевизначення віртуальних функцій документа

Як мовилося раніше, функції OnNewDocument і Serialize є віртуальними, а отже, перед застосуванням їх необхідно перевизначити (override). Не дивлячись на те, що відповідні функції-члени базового класу CDocument володіють стандартною поведінкою, достатньою для більшості випадків, іноді виникає необхідність в спеціальній обробці документа, яку базові функції безумовно не виконують.

Наприклад, клас CDocument і класи, похідні від нього, викликають функцию-член OnNewDocument() всякий раз, коли програма ініціалізувала новий об'єкт документа (або коли вона багато разів використовує існуючий об'єкт документа в додатку SDI). Зазвичай в додатку виклик функції OnNewDocument здійснюється при виборі в меню File (Файл) пункту New (Створити). Аналогічно, клас CDocument викликає функцию-член OnCloseDocument, перш ніж додаток закриє документ. Якщо в створених користувачем класах документа перед завершенням роботи додатку і видаленням об'єкту документа необхідно виконати які-небудь дії (очистити зайняту пам'ять або закрити допоміжні файли), то цю функцію теж доведеться перевизначити.

Класи документа використовують функції OnOpenDocument і OnSaveDocument для читання документа з диска і, відповідно, для запису документа на диск. Перевизначати ці функції має сенс тільки в тому випадку, якщо їх стандартна реалізація (що має на увазі виклик функції-члена Serialize) недостатня. Чудовим прикладом ситуації, коли перевизначення функцій OnOpenDocument і OnSaveDocument неминуче, є шифрування даних перед записом на диск (і відповідно дешифровка при читанні з диска).

Реалізація за умовчанням функцій OnOpenDocument і OnCloseDocument має на увазі виклик функції-члена DeleteContents, яка видаляє лише вміст документа, не видаляючи сам об'єкт документа. Застосування функції DeleteContents при відкритті нового документа ефективніше (як з погляду використання пам'яті, так і швидкості виконання додатку), ніж фактичне видалення з пам'яті об'єкту колишнього документа і створення нового.

Функція-член OnFileSendMail пересилає по електронній пошті об'єкт документа як додаток (attachment) до повідомлення. Спочатку здійснюється виклик функції OnSaveDocument, що дозволяє зберегти копію документа в тимчасовому файлі на диску (у каталозі, вказаному в змінного середовища оточення TEMP). Потім програмний код функції-члена прикладає тимчасовий файл до повідомлення MAPI (Messaging Application Programming Interface або Messaging API— інтерфейс прикладних програм електронної пошти). Далі, код функції використовує функцию-член OnUpdateFileSendMaiL, щоб виконати команду, що ідентифікується в меню додатків константою ID_FILE__SEND_MA.IL, або зовсім відмовитися від відправки, якщо підтримка MAPI програмі недоступна. Обидві функції (OnFileSendMail і OnUpdateFileSendMail) є перевизначуваними, що дозволяє реалізувати в додатках нестандартну поведінку при обміні повідомленнями.


 

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

74203. Сылақ және майлау жұмыстарына арналған машиналар 717.44 KB
  Сылақ станциялары мен агрегаттары және қол ысқылауыштарының атқаратын қызметі негізгі параметрлері және қолданылу облысы. Жылжымалы сылау агрегаттары. Еден асты негіздерін дайындауға және шатыр мен гидроизоляциялауға арналған машиналар құрылымы мен жұмысы Жоспар: Сылақ станциялары мен агрегаттары және қол ысқылауыштарының атқаратын қызметі.
74204. Жер жұмыстарына арналған машиналар туралы жалпы мағлұматтар 147.63 KB
  Жұмысшы органдары мен топырақпен өзара әсерлесуі. Топырақтардың физикамеханикалық сипаттамасы Жоспар: Жер жұмыстарына арналған машиналар туралы жалпы мағлұматтар. Жұмысшы органдары мен топырақпен өзара әсерлесуі. Топырақтардың физикамеханикалық сипаттамасы.
74205. Жер қазу-тасымалдау машиналары. Қызметі, қолданылу облысы. Негізгі техника-экономикалық көрсеткіштері 659.49 KB
  Жер қазутасымалдау машиналары ЖҚТМ деп топырақты массивтен тарту күші арқылы ажыратып оны түсіру орнына өз жүрісімен жеткізетін құрылыс машиналарын атайды. Негізгі атқаратын жұмысшы операциялары: топырақты қабаттап өңдеу оны тасымалдау құрылыс объектісі негізіне төсеу немесе төгу топырақ беттерін жоспарлау. Негізгі қызметі: топырақты жер бетімен сүргіш органы арқылы азғана арақашықтыққа 150м жылжыту арқылы қабаттап өңдеу. Мына жағдайларда қолданылады: құрылыс алаңын дайындау барысында топырақтың беткі құнарлы қабатын алу;...
74206. Экскаваторлар. Жіктелуі, қолданылу облысы. Жұмысшы органының негізгі түрлері, параметрлері және құрылыс экскаваторларының индексациясы 885.5 KB
  Біршөмішті экскаватордың жұмыс циклі рет-ретімен орындалатын топырақ қазу, оны шөмішпен төсеу орнына тасымалдау, топырақты үйме мен көлік құралына аудару арқылы шөмішті босату және келесі циклді бастау үшін шөміштің алғашқы позициясына қайтып оралу операцияларынан тұрады
74207. Бұрғылау машиналары және жабдықтары. Бұрғылау құралы. Шпурлар бұрғылауға арналған машиналар. Бұрғылау-кранды машиналар 1.45 MB
  Бұрғылау – бұл топырақ массивінде қирау заттарын сыртқа шығара отырып, цилиндрлік жазықтықтар түзу арқылы топырақты қирату процесі. Егер диаметрі 75 мм дейін және тереңдігі 9 м болса жазықтықтар шпурлар деп, ал өлшемдері үлкен болса бұрғы деп аталынады.
74208. Тиеп-түсіру машиналары. Тиегіштер түрлері. Жұмыс процесі 455.42 KB
  Жұмысшы жабдық нұсқаларының көптігі және жұмыс органдарының ауыспалылығы құрылыс тиегіштерінің жұмыс жасау облысын кеңейтіп оларды құрылыс тасымалының барлық этаптарында қолданылатын универсалды машинаға айналдырады. БФПТтердің жұмысшы жабдығы жебе коромысло тартқыш гидроцилиндрлер құратын рычагты механизмнен тұрады. Сонымен қатар түсіру биіктігін ондаған сантиметрге жоғарылатытын машинаның универсалдылығын арттыратын жақты шөміштер де қолданылады бірақ олар жұмысшы жабдықтың күрделенуіне қосымша гидравликалық контурлар орнату...
74209. Машиналардың ұсақтау типтері жәнеұсақталатын материал беріктігі мен ұсақталу дәрежесіне қарай оларды таңд. 1.43 MB
  Грохоттардың қолданылуы принциптік схемалары жұмыс процестері негізгі параметрлері мен жұмыс өнімділігі Жоспар: Машиналардың ұсақтау типтері және ұсақталатын материал беріктігі мен ұсақталу дәрежесіне қарай оларды таңдап алу. Тас жыныстарды бұзу мен уатудың механикалық процесі ұсақтау деп аталады және тас ұсақтағыш машиналар тас ұсақтағыштарды қолдана отырып ұсақтау жаншу сындыру және үйкеу көмегімен жүзеге асырылады. Ұсақтау машиналарында ұсақталатын жыныстың қасиеттеріне және ірілігіне қарай әртүрлі әдістер бірге қолданылады.
74210. Бетон қоспалары мен сылақтарын дайындауға арналған машиналар мен жабдықтар. Араластырғыш машиналардың қызметі мен құрамы. Араластырғыш машиналардың жіктелуі 1.46 MB
  Бетон араластырғыштар мен циклді және үздіксіз жұмыс жасайтын сылақ араластырғыштардың типтері негізгі параметрлері мен конструктивтік схемалары. Бетон қоспаларын тығыздау қажеттіліктері мен тәсілдері Жоспар: Араластырғыш машиналардың қызметі мен құрамы. Бетон араластырғыштар мен циклді және үздіксіз жұмыс жасайтын сылақ араластырғыштардың типтері негізгі параметрлері мен конструктивтік схемалары.
74211. Топырақ тығыздағыш машналар. Топырақты домалату, таптау және вибротаптау арқылы тығыздау 930.22 KB
  Топырақты домалату таптау және вибротаптау арқылы тығыздау. Жұмыс процесі негізгі параметрлері техникалық және эксплуатациялық көрсеткіштері Жоспар: Топырақ тығыздағыш машиналар. Топырақты домалату таптау және вибротаптау арқылы тығыздау.