|
Windows основана на архитектуре с управлением по событиям.
Это означает, что весь ввод от пользователя интерпретируется как
события. Когда событием является щелчок кнопкой "мыши" или нажа-
тие клавиши клавиатуры, то происходит событие, и Windows генери-
рует сообщение. Например, если пользователь щелкает левой кнопкой
"мыши", Windows генерирует сообщение wm_LButtonDown. Если пользо-
ватель нажимает клавишу, Windows генерирует событие wm_KeyDown.
При выборе "мышью" или с помощью клавиатуры Windows интерп-
ретирует все команды меню и управляющие команды как сообщения
wm_Command. Эта архитектура с управлением по событиям отлично со-
гласуется с объектно-ориентированным подходом Borland Pascal.
Графика, независимая от устройств
─────────────────────────────────────────────────────────────────
Windows унифицирует процесс вывода на экран и печать в одном
модуле, который называется интерфейсом с графическими устройства-
ми (GDI) и который обеспечивает общий интерфейс для каждой прог-
раммы Windows. Кроме того, в Windows предусмотрены драйверы уст-
ройств для большинства стандартных графических адаптеров и прин-
теров. В результате система позволяет вам писать одно приложение,
которое без изменений работает на большинстве существующих в мире
аппаратных средствах.
Графика, независимая от устройств, предлагает некоторые пре-
имущества, которые не бросаются в глаза сразу. Одним из них явля-
ется то, что приложения Windows легкоустанавливаемы, так как не
B.Pascal 7 & Objects /UG - 246 -
требуют переконфигурации системы с конкретными драйверами уст-
ройств. Другое состоит в том, что приложения Windows часто лучше
работают в локальной сети, поскольку каждый пользователь имеет
свою собственную локальную конфигурацию.
Но графика, независимая от устройств, требует жертв. Для
разработчика эти "жертвы" состоят в соблюдении в чем-то строгих
требований GDI. GDI ограничивает возможности программиста в про-
ектировании приложений.
Многозадачность
─────────────────────────────────────────────────────────────────
Windows позволяет пользователям выполнять несколько приложе-
ний параллельно, устраняя необходимость использования резидентных
в памяти программ (TSR). В Windows реализована не просто многоза-
дачность. Она поддержана набором средств и межпроцессорных комму-
никаций, таких как буфер вырезанного изображения Clipboard и ди-
намический обмен данными (DDE).
Windows управляет множеством приложений, ограничивая исполь-
зование экрана каждым приложением одной или более прямоугольной
областью, которые называются окнами. Эти окна можно перемещать,
изменять их размер и временно сворачивать в пиктограммы, позволяя
пользователю быстро переключаться от одной задачи к другой.
С точки зрения программиста это означает, что программа не
должна записывать текст или графику непосредственно по экранным
адресам, а должна выводить их в пользовательскую область окна -
область внутри рамки окна. Аналогично, прикладная программа долж-
на использовать память компьютера совместно с другими приложения-
ми. Хорошо построенное приложение Windows корректно соблюдает
правила Windows работы с экраном и управления памятью.
Управление памятью
─────────────────────────────────────────────────────────────────
В типичном сеансе работы с Windows множество приложений мно-
гократно открываются и закрываются, поэтому нерационально загру-
жать каждое приложение в память после предыдущего - Windows скоро
исчерпает память. Вместо этого Windows, чтобы удовлетворить пот-
ребности других приложений или самой Windows, может перемещать
память большинства приложений в другую часть памяти или на диск.
Таким образом, приложение Windows должно соответствовать ди-
намическому распределению памяти Windows и избегать прямого обра-
щения к адресам памяти. Например, традиционный указатель на ячей-
ку памяти может быстро стать недопустимым, когда Windows пере-
распределит память, так как может указывать на ячейку памяти, ко-
торая используется для чего-то еще.
B.Pascal 7 & Objects /UG - 247 -
Вместо указателей Windows использует описатели, которые по
существу представляют собой указатели на указатели. Описатели -
это номера, использующиеся в качестве индексов в обслуживаемой
Windows таблице указателей. Таким образом, приложения Windows
ссылаются на окно или содержимое экрана (область для отображения
на экране) по описателю. Имеются также указатели экземпляров при-
ложений, строк, средств отображения и ресурсов, таких как меню и
пиктограммы.
При обычной работе вам не потребуется иметь дело с самими
описателями. Вы можете выделять и освобождать память в динамичес-
ки распределяемой области с помощью обычных подпрограмм New,
Dispose, GetMem и FreeMem, а Borland Pascal будет взаимодейство-
вать с Windows и обеспечивать для нее информацию о том, на что
фактически ссылаются эти указатели.
Одним из основных преимуществ управления памятью в Windows
является возможность совместно использовать в приложениях скомпи-
лированный код. Например, если пользователь выполняет два экземп-
ляра одного и того же приложения, то эти приложения используют
один и тот же скомпилированный код в памяти. Аналогично, приложе-
ние может динамически загружать библиотечный модуль, совместно
используемый в нескольких прикладных программах. Это называется
динамически компонуемой библиотекой - DLL.
Ресурсы
─────────────────────────────────────────────────────────────────
Ресурсы представляют собой описания устройств пользователь-
ского интерфейса приложения Windows: его меню, диалоговых окон,
курсоров, пиктограмм, битовые массивы, строки и командные клави-
ши. Windows обеспечивает средства для поддержки этих описаний вне
исходного кода приложения. Ресурсы приложения объединяются с его
выполняемым файлом перед выполнением приложения. Чтобы ограничить
использование памяти, приложение вызывает ресурсы в память только
когда они необходимы.
Отделение спецификаций ресурса от исходного кода имеет до-
полнительное преимущество: вы можете изменить вид приложения, не
затрагивая исходного кода программы. Фактически, для модификации
ресурсов приложения вам не нужно даже иметь исходный код. Это об-
легчает настройку или трансляцию существующих приложений Windows.
Для создания и настройки ресурсов Borland Pascal включает в
себя пакет разработчика ресурсов Resourse Workshop.
Динамическая компоновка
─────────────────────────────────────────────────────────────────
Windows позволяет приложениям, включая программы Borland
Pascal, загружать и освобождать библиотечные модули на этапе ком-
поновки. Эти модули должны быть записаны в специальном выполняе-
B.Pascal 7 & Objects /UG - 248 -
мом формате (EXE), который называется динамически компонуемой
библиотекой (DLL). Часто эти библиотеки выполняют специальные и
сложные задачи, такие как преобразование форматов файлов. В этом
случае программа может применять DLL как фильтры для экспорта и
импорта файлов. Кроме того, DLL могут совместно использоваться
группой приложений, что способствует совместному использованию и
экономии памяти.
Буфер вырезанного изображения
─────────────────────────────────────────────────────────────────
Буфер вырезанного изображения Clipboard позволяет пользова-
телям передавать информацию, такую как текст, графику и данные,
между приложениями, между различными частями приложения или в ка-
честве временной памяти для последующего использования. Например,
программа обработки текста может использовать буфер вырезанного
отображения для операций удаления, копирования и вставки текста.
Динамический обмен данными
─────────────────────────────────────────────────────────────────
Динамический обмен данными (DDE) - это еще один механизм пе-
редачи информации. В то время как буфер вырезанного изображения
полностью находится под контролем пользователя, DDE выполняет
"закулисную" работу под управлением программы. Посылая DDE-сооб-
щения, программа передает информацию другой программе.
B.Pascal 7 & Objects /UG - 249 -
Множественный документальный интерфейс
─────────────────────────────────────────────────────────────────
Множественный документальный интерфейс (MDI) устанавливает
соглашения по пользовательскому интерфейсу для создания окон, со-
держащих внутри себя дочерние окна. Примером MDI может служить
интегрированная интерактивная среда для Windows Borland Pascal. В
оперативной области Borland Pascal пользователь может открыть
сразу несколько окон. Каждое окно редактирования является дочер-
ним окном.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█╔═[]═════════════════════════════════════════════════════════╗█
█║▒=▒████████████████████Borland Pascal████████████████████│^│v║█
█║─────────────────────────────────────────────────────────┴─┴─║█
█║ File Edit Search Run Compile Tools Options Windows Help ║█
█║─────────────────────────────────────────────────────────────║█
█║╔════════════════════════════════════════════╗ ║█
█║║▒=▒ c:\bpw\helloapp.pas │^│v║ ║█
█║║────────────────────────────────────────┴─┴─║ ║█
█║║ program Hello; ^║ ║█
█║║ ▒║ ║█
█║║ uses WObjects, WinTypes, WinProcs; ▒║ ║█
█║║ ▒║ ║█
█║║ type ▒║ ║█
█║║ ▄║ ║█
█║║ { Define a TApplications descendant } ▒║ ║█
█║║ THelloApp = object(TApplication) ▒║ ║█
█║║ procedure InitMainWindow; virtual; v║ ║█
█║║<▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>▒║ ║█
█║╚════════════════════════════════════════════╝ ║█
█║ ║█
█║ ║█
█║ ║█
█║▒▒▒1:1▒▒▒▒▒▒Insert▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║█
█╚═════════════════════════════════════════════════════════════╝█
█████████████████████████████████████████████████████████████████
Рис. 10.2 Окна IDE для Windows Borland Pascal - приложение
MDI.
B.Pascal 7 & Objects /UG - 250 -
Типы данных Windows
─────────────────────────────────────────────────────────────────
Благодаря схеме управления данными Windows и ее подобию язы-
ку программирования Си, программированию для Windows с помощью
Borland Pascal способствуют некоторые специализированные типы
данных. Например, описатель окна сохраняется под типом HWnd.
Borland Pascal и ObjectWindows определяют новые типы, содействую-
щие работе с таким типом как HWnd. Все эти новые типы и структуры
данных описаны в "Руководстве по программированию с использовани-
ем ObjectWindows".
Объектно-ориентированная работа с окнами
─────────────────────────────────────────────────────────────────
Как можно видеть, программирование в многооконной среде тре-
бует знания многих событий, форматов, описателей и других прило-
жений, поэтому разработка программы Windows может показаться
трудной задачей. К счастью, объектно-ориентированное программиро-
вание упрощает задачу программирования для многооконной среды и
позволяет разработчику прикладной программы сосредоточиться на
функциях приложения, а не на его форме. Используя объекты для
представления таких сложных структур как окна, программы Borland
Pascal могут инкапсулировать свои операции и хранение данных.
Этой цели служит ObjectWindows.
Объектно-ориентированное программирование обеспечивает ту
основу, в рамках которой программист может использовать объекты
для представления элементов интерфейса с пользователем программы
Windows. Это означает, что окно является объектом.
Окно ObjectWindows объектные типы прикладной программы под-
держивают требуемую от программы Windows работу с сообщениями,
значительно упрощая взаимодействие программиста с пользователем.
Фактически, объекты ObjectWindows представляют не только окна,
они представляют диалоговые блоки и управляющие элементы, такие
как блоки списка и командные кнопки.
Лучший интерфейс с Windows
─────────────────────────────────────────────────────────────────
ObjectWindows использует объектно-ориентированные расширения
Borland Pascal для инкапсуляции прикладного программного интер-
фейса Windows (API), скрывая от вас детали программирования для
Windows. В результате вы можете использовать IDE для Windows
Borland Pascal для написания программ Windows, затрачивая сущест-
венно меньше времени и усилий, чем это потребовалось бы при не-
объектно-ориентированном программировании. ObjectWindows предус-
матривает три полезных средства: инкапсуляцию информации окна,
абстракцию функций API Windows и автоматический ответ на сообще-
ния.
B.Pascal 7 & Objects /UG - 251 -
Интерфейсные объекты
Хотя библиотека ObjectWindows определяет объекты для окон,
диалоговых окон и управляющих элементов, она предусматривает
только поведение объектов, их атрибуты и типы данных. Физической
реализацией, визуальным отображением элемента на экране, управля-
ет сама Windows. Таким образом, объекты ObjectWindows, которые мы
называем интерфейсными объектами, взаимодействуют с соответствую-
щими визуальными элементами, которые мы называет интерфейсными
элементами. Успешное управление взаимодействием объект/элемент -
это ключ к успешному программированию в Windows с использованием
ObjectWindows.
Взаимодействие объект/элемент осуществляется через описатель
окна. Когда вы строите интерфейсный объект, одной из его функций
является указание Windows на создание интерфейсного элемента.
Windows возвращает идентифицирующий этот элемент описатель, кото-
рый объект сохраняет в поле с именем HWindow. Многие функции
Windows воспринимают описатель окна в качестве параметра, поэтому
сохранение его в поле поддерживает готовность доступа к оконному
объекту. Аналогично, поля интерфейсного объекта можно использо-
вать для сохранения информации о средствах отображения или инфор-
мации о состоянии конкретного окна.
Абстрагирование функций Windows
Приложения Windows управляют своим видом и поведением путем
вызова функций Windows - набора почти из 600 функций, образующий
интерфейс с прикладной программой Windows (API). Каждая функция
воспринимает разнообразные параметры различных типов, которые мо-
гут быть достаточно запутанными. Хотя из Borland Pascal вы можете
непосредственно вызывать любую функцию Windows, ObjectWindows уп-
рощает задачу, предлагая объектные методы, абстрагирующие функци-
ональные вызовы.
Как отмечалось выше, многие из параметров для функций
Windows уже записаны в полях интерфейсных объектов. Таким обра-
зом, методы могут использовать эти данные для подстановки пара-
метров для функций Windows. Кроме того, ObjectWindows группирует
родственные функциональные вызовы в отдельных методах, которые
выполняют задачи более высокого уровня. Результатом является уп-
рощенный и простой в использовании интерфейс API, улучшающий су-
ществующий API Windows.
Хотя такой подход существенно уменьшает вашу зависимость от
сотен функций API Windows, он не запрещает вам вызывать API не-
посредственно. ObjectWindows предлагает лучшее из обоих "миров":
объектно-ориентированную разработку высокого уровня, плюс макси-
мальное управление графической операционной средой.
Автоматизация ответа на сообщения
Кроме сообщения операционной среде Windows, что надо что-то
B.Pascal 7 & Objects /UG - 252 -
сделать, большинство приложений должны иметь возможность отвечать
на сотни сообщений Windows, являющихся результатом действий поль-
зователя (например, щелчка кнопкой "мыши"), других приложений или
прочих источников. Корректная обработка сообщений и ответ на них
является решающим для правильной работы вашей программы. Кроме
того, ваша программа должна как-то отвечать на выбор меню, и в
ответ на конкретное сообщение реализовать это не трудно. Но напи-
сание программы, которая знает как отвечать почти на 200 различ-
ных сообщений Windows, также затруднительно, как вызов нужных
функции Windows.
Объекты с их предопределенным поведением (методами) прекрас-
но подходят для задачи ответа на внешние воздействия (сообщения
Windows). ObjectWindows превращает сообщения Windows в вызовы ме-
тодов Borland Pascal. Таким образом, с помощью ObjectWindows вы
просто определяете метод для ответа на каждое сообщение, которое
вам нужно обрабатывать в программе. Например, когда пользователь
щелкает левой кнопкой "мыши", Windows генерирует сообщение
wm_LButtonDown. Если вы хотите, чтобы окно или управляющий эле-
мент в вашей программе реагировали на такие нажатия кнопки "мы-
ши", нужно определить метод WMLButtonDown, настроенный на сообще-
ние wm_LButtonDown. Затем, когда Windows посылает это сообщение,
ваш объект автоматически вызывает определенный вами метод.
Такие методы называются методами ответа на сообщение. Без
объектно-ориентированного программирования и ObjectWindows вам
пришлось бы написать длинный оператор case для каждого окна и уп-
равлять поступлением этого сообщения, отсортировывать вид сообще-
ния и наконец, решать, что с ним делать. ObjectWindows берет на
себя все эти функции.
B.Pascal 7 & Objects /UG - 253 -
Структура программы Windows
─────────────────────────────────────────────────────────────────
При наличии такого множества взаимодействующих элементов
программного обеспечения как DOS, Windows и прикладные программы
полезно знать о том, какие части ваших приложений Windows взаимо-
действуют с окружающей их программной средой. В данном разделе
исследуется структура типичных приложений Windows, написанных в
Borland Pascal with Objects.
Дата добавления: 2015-09-30; просмотров: 29 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |