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) є перевизначуваними, що дозволяє реалізувати в додатках нестандартну поведінку при обміні повідомленнями.


 

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

26630. САНИТАРНАЯ ОЦЕНКА РЫБЫ ПРИ ОБНАРУЖЕНИИ МЕТАЦЕРКАРИЕВ КОШАЧЬЕЙ ДВУУСТКИ 7.28 KB
  САНИТАРНАЯ ОЦЕНКА РЫБЫ ПРИ ОБНАРУЖЕНИИ МЕТАЦЕРКАРИЕВ КОШАЧЬЕЙ ДВУУСТКИ. Человек заражается при поедании сырой вяленой слабо соленой и недостаточно проваренной рыбы пораженной личинками гельминтов. Поэтому проводят санитарную экспертизу свежевыловленной а в отдельных случаях и замороженной рыбы. Исследование соленой копченой вяленой сушеной и маринованной рыбы не дает объективных результатов.
26631. САНОЦЕНКА ТУШ И ОРГАНОВ ПРИ ПАРАТУБЕРКУЛЕЗЕ КРС 3.81 KB
  Кроме общих признаков недомогания наблюдают профузный понос отеки в межчелюстной области в области подгрудка и в нижней части живота отекают веки появляется шилозадость. При наличии патологоанатомических изменений в кишечнике в брыжеечных лимфоузлах гортани отеке межчелюстной области головы измененные внутренние органы и кишечник с брыжейкой направляют на утилизацию а тушу и другие продукты убоя выпускают без ограничения.
26632. САНИТАРНАЯ ОЦЕНКА ТУШ И ОРГАНОВ ПРИ ПАСТЕРЕЛЛЕЗЕ 3.17 KB
  При сверхостром и остром: повыш t угнетение конъюнктивит в области головы и шеи отеки опухание языка; у свиней – затрудненное дыхание красные пятна на коже живота за ушами не бледнеющие при надавливании. В области головы и шеи студенистые инфильтраты в п к при разрезе прозрачная янтарная жидкость.
26633. САНИТАРНАЯ ОЦЕНКА ТУШ И ОРГАНОВ ПРИ ПОВАЛЬНОМ ВОСПАЛЕНИИ ЛЕГКИХ И ЗЛОКАЧЕСТВЕННОЙ КАТАРАЛЬНОЙ ГОРЯЧКЕ. 3ЛОКАЧЕСТВЕННАЯ КАТАРАЛЬНАЯ ГОРЯЧКА 17.24 KB
  САНИТАРНАЯ ОЦЕНКА ТУШ И ОРГАНОВ ПРИ ПОВАЛЬНОМ ВОСПАЛЕНИИ ЛЕГКИХ И ЗЛОКАЧЕСТВЕННОЙ КАТАРАЛЬНОЙ ГОРЯЧКЕ. В легких иногда находят лобулярную катаральногнойную пневмонию. Контагиозное заболевание характеризующееся крупозной пневмонией и плевритом с последующим развитием анемических некрозов секвестров в легких. При сверхостром течении болезни резко выражены признаки поражения плевры экссудативный плеврит или легких.
26634. САНИТАРНАЯ ОЦЕНКА ТУШ О ОРГАНОВ ПРИ ТУЛЯРЕМИИ И ЛЕЙКОЗЕ. ТУЛЯРЕМИЯ 6.47 KB
  ПРЕДУБОЙНАЯ ДИАГНОСТИКА: крс – увеличение л у маститы параличи конечностей бессимптомно. ПОСЛЕУБОЙНАЯ ДИАГНОСТИКА: у овец – на внут. ПРЕДУБОЙНАЯ ДИАГНОСТИКА: протекает скрытно. ПОСЛЕУБОЙНАЯ ДИАГНОСТИКА: резко увеличенные л у повть разреза набухшая саловидная серобел с очагов кровоизл казеозными очагами некроза.
26635. САНИТАРНАЯ ОЦЕНКА ТУШ И ОРГАНОВ ПРИ ЧУМЕ КРС 9.74 KB
  Акт дефекации болезненный слизистая оболочка прямой кишки выпячивается приобретает темнокрасный цвет. При подостром течении отмечают снижение температуры заживление язв и эрозий на слизистых оболочках ротовой полости исчезновение признаков поражения желудочнокишечного тракта. Слизистая оболочка стенки ротовой полости покрыта толстым слоем тягучей слизи. Слизистая оболочка зева покрасневшая отечная местами покрыта крупозными пленками которые иногда снимаются легко а иногда после снятия их остается изъязвленная поверхность.
26636. САНИТАРНАЯ ОЦЕНКА ТУШ И ОРГАНОВ ПРИ ЧУМЕ СВИНЕЙ И БОЛЕЗНИ АУЕСКИ 6.13 KB
  САНИТАРНАЯ ОЦЕНКА ТУШ И ОРГАНОВ ПРИ ЧУМЕ СВИНЕЙ И БОЛЕЗНИ АУЕСКИ. БОЛЕЗНЬ АУЕСКИ острое инфекционное вирусное заболевание животных характеризующееся поражением ЦНС органов дыхания и сильным зудом в месте проникновения возбудителя; у свиней зуда не бывает. У взрослых свиней доброкачественно 13 дня выздоровление. У свиней овец отек гортани легких в дыхательных путях пенистая жидкость; часто поражаются гортань трахея.
26637. СЕПАРИРОВАНИЕ МОЛОКА. РАСЧЕТ ВЫХОДА СЛИВОК 7.84 KB
  СЕПАРИРОВАНИЕ МОЛОКА. Сепаратор аппарат служащий для разделения цельного молока на сливки и обезжиренное молоко. Через соответствующие отверстия разделенные фракции молока направляются в приемники рожки. Сепараторы могут быть открытые с поступлением молока и отводом сливок и обезжиренного молока открытыми потоками.
26638. СОЗРЕВАНИЕ МЯСА. ТОКСИКОИНФЕКЦИИ ПАРАТИФОЗНОГО ХАРАКТЕРА 21.82 KB
  СОЗРЕВАНИЕ МЯСА. Мясо только что убитого животного имеет плотную консистенцию при варке дает неароматный бульон из такого мяса почти невозможно выделить мясной сок реакция его близка к нейтральной оно жесткое плохо усваивается. В течение первых 24 часов после убоя животного в зависимости от температуры и других факторов пищевые качества и внешние показатели мяса резко меняются: мясо становится нежным мясной сок легко отделяется при варке мясо дает прозрачный ароматный бульон реакция его смещается в кислую сторону мясо хорошо...