Шаг 1.
Библиотека OWL.
Основные классы библиотеки ObjectWindows

    На этом шаге мы дадим краткую характеристику библиотеки OWL.

    Материал этих шагов базируется на книгах:

  1. Бессонова С.В., Луценко А.Ю. Методические рекомендации по изучению библиотеки OWL. - Курган: Изд-во Кург.гос.ун-та, 2002. - 79 с.
  2. Сван Т. Borland C++. Практический курс. - К.: Диалектика, 1996. - 544 с.
  3. Уолхэм К. Объектно-ориентированное программирование на языке Borland C++. Минск: ООО "Попурри", 1997. - 640 с.
Все приведенные в этих шагах программы созданы в среде программирования Borland C++ 4.5.

    OWL (Object Windows Library) - это объектно-ориентированная библиотека, базирующаяся на Windows API. Она содержит множество классов, способствующих более быстрому и простому написанию прикладных программ. OWL-классы представляют набор объектов, из которых создается Windows-приложение, содержащее такие объекты, как окна, диалоговые окна, меню, элементы управления и другие, включая некоторые специальные объекты, такие как строки состояния и управления.

    В частности, ObjectWindows 2.0 поддерживает следующие основные категории классов:

    Ниже дан краткий обзор этих категорий OWL-классов.

Класс TAppliation

    Любая программа, написанная с использованием ObjectWindows, начинает свое существование, как объект приложения. Этот объект порождается классом TApplication библиотеки OWL и обеспечивает инициализацию, выполнение и завершение вашей Windows-программы. Более конкретно: TApplication регистрирует, создает и отображает основное окно приложения; поддерживает работу цикла обработки сообщений (таким образом, что прикладная программа может взаимодействовать как с пользователем, так и с Windows), и закрывает его, когда работа закончена. Класс TApplication обеспечивает полноценную работающую Windows-программу, выполняющую, правда, не более сложное действие, чем вывод окна на экран. TApplication поддерживает некоторые дополнительные функции - такие, как обеспечение доступа к командной строке приложения, позволяя подключать различные библиотеки, а также определить, когда Windows простаивает.

Оконные классы

    Когда вы создаете базовое OWL-приложение, TApplication автоматически создает главное окно. Это окно полностью функционирует, то есть можно изменить его размеры, переместить, максимизировать, минимизировать и закрыть. Поскольку наблюдать работу такого приложения - занятие довольно скучное, библиотека OWL, естественно, должна дать возможность заставить это окно делать что-нибудь еще. Здесь на помощь приходят оконные OWL-классы, позволяющие нарастить функциональные возможности вашего окна по сравнению со стандартными. Чтобы облегчить эту задачу, OWL вводит несколько различных видов окон.

  1. Дочерние окна общего вида. Дочернее окно общего вида представлено в OWL 2.0 классом TWindow. Это основное окно, которое обеспечивает поддержку меню, линейки прокрутки, элементы управления, оконную графику, обмен данными, стандартную обработку сообщений и многое другое. Объект TWindow умеет делать все, что требуется от дочернего окна. Хотя класс TWindow можно использовать для создания основного окна, его все же лучше попридержать для других целей. Основное окно приложения должно быть окном класса TFrameWindow.

       

  2. Родительские окна. Родительские окна, представленные классом TFrameWindow, поддерживают все функции класса TWindow и, вдобавок, работу с клавиатурой и окнами пользователя. Родительские окна являются также базовым классом для декорированных MDI-окон. Большинство функций TFrameWindow наследуется из базового класса TWindow, представляющего общие окна в ObjectWindows 2.0, главное окно представлено классом TFrameWindow. Фактически, окно, создаваемое объектом TApplication по умолчанию, является обрамляющим.

       

  3. Декорированные обрамляющие окна. Декорированные обрамляющие окна, инкапсулированные в классе TDecoratedFrame и производные от обычных обрамляющих окон, позволяют вставить в приложение такие элементы оформления, как панели инструментов, строки подсказки и состояния, инструментарии, представленные соответственно классами TControlBar, TToolBox, TMessageBar и TStatusBar. Когда вы вставляете эти специальные элементы в декорированное обрамляющее окно, оно автоматически размещает их и поддерживает в нужном месте, если пользователь перемещает окно или изменяет его размеры. Кроме того, с помощью функции оформленного родительского окна Insert() вы можете вставлять в окно такие объекты, как панель инструментов и строка состояния. Существуют также функции для показа и удаления элементов оформления и отображения текста подсказки для выделенных элементов меню.

       

  4. MDI-окна. Для обеспечения многодокументного интерфейса (MDI) ObjectWindows поддерживает несколько оконных классов, служащих специально для создания MDI-приложений. Родительское MDI-окно, включенное в класс TMDIFrame, работает как основное окно MDI-приложения. Во время работы такой программы это окно содержит, как минимум, невидимое окно пользователя и, возможно, несколько дочерних окон. Родительское окно обрабатывает основное меню приложения, включающее специальное меню Windows. Это меню позволяет выбирать окра и размещать их каскадом, мозаикой, либо произвольно.

        MDI-окно пользователя, представленное классом TMDIClient, поддерживает большинство функций MDI-приложений. Вообще говоря, сообщения, посылаемые MDI-приложению, направляются для обработки в окно пользователя. Окно пользователя автоматически обрабатывает четыре основные команды оконного меню MDI-программы, позволяя без особых усилий добавить новые окна, а также закрывать их. MDI-окно-клиент может также автоматически создавать дочерние MDI-окна.

        Все дочерние окна в MDI-приложений должны быть дочерними MDI-окнами, поэтому для окон такого типа ObjectWindows, само собой, поддерживает специальный класс TMDIChild. Дочерние MDI-окна работают почти так же, как и родительские окна на главной панели Windows, только здесь "рабочий стол" (Desktop) определяется окном-клиентом MDI-приложения. Пользователь может свернуть дочерние MDI-окна до иконки или максимизировать их, заполняя все окно-клиент.

Меню

    Одной из отличительных черт Windows-программы является строка меню. Почти все приложения Windows используют меню, что подразумевает (или должно подразумевать) определенные правила их построения. Следуя этим правилам, пользователь отыскивает известные ему команды в ожидаемом месте независимо от того, какое приложение активно в данный момент. Для обработки простого меню отлично работают обычные методы, для более гибкой работы с меню используются OWL-классы TMenu, TSystemMenu и TPopupMenu.

    Класс TMenu, служащий для работы с основным меню, содержит такие функции, как добавление в меню новых элементов, изменение их наименования, разрешение и блокирование элементов меню, отображение и удаление маркеров и даже вставка в меню растровых изображений. Кроме того, вспомогательные функции класса выдают такую информацию, как число элементов меню, размер растрового изображения маркера, идентификаторы наименований (ID), состояние меню и т.п.

    Класс TSystemMenu предлагает дополнительные функции управления системным меню. Этот класс позволяет заменить системное меню окна на свое собственное. Наконец, класс TPopupMenu позволяет создавать в любом месте окна всплывающее меню.

Окна диалога

    Аналогично тому, как большинство Windows-приложений использует меню для получения от пользователя команд, окна диалога используются для ввода данных. Для окон диалога в OWL существует класс TDialog, подобный классу TMenu. Класс TDialog выполняет всю работу, связанную с созданием, функционированием и закрытием окна диалога, включая встроенную обработку наиболее часто используемых типов кнопок и механизмы пересылки данных в и из окна диалога. Кроме того, окно может быть модальным и немодальным, может содержать множество элементов управления и может даже изображаться как трехмерная пространственная форма с помощью библиотек DLL фирм Borland и Microsoft.

    OWL также инкапсулирует в классы стандартные диалоговые окна Windows и другие "сборные" диалоговые окна. Эти классы, включая TInputDialog, TPrinterAbortDlg, TChooseColorDialog, TFindReplaceDialog, TChooseFonDialog, TPrintDialog и TOpenSaveDialog позволяют пользователю ввести одиночную строку текста, выбрать имена файлов, найти текстовую строку, настроить принтер, подобрать цвета и шрифты.

Элементы управления

    Приложения Windows загружаются вместе со специальными элементами управления, такими, как кнопки, окна списков, линейки прокрутки и окна редактирования.

    Поскольку в приложениях интенсивно используются элементы управления Windows, они реализованы в OWL в качестве классов. Например, элемент "список", включенный в класс TListBox, содержит функции-члены для вставки и удаления строк списка, очистки списка, поиска в нем заданной строки, определения числа выбранных элементов списка, восстановления выбранных строк, пометки строк и другие. Класс TScrollBar, реализующий линейки прокрутки, позволяет, в частности, получить и задать позицию бегунка, задать диапазон прокрутки.

    Кроме перечисленных выше классов, в OWL существуют классы для кнопок (TButton), групповых окон (TGroupBox), комбинированных окон (TComboBox), элементов управления редактированием (TEdit), окон переключателей (TCheckBox), радиокнопок (TRadioButton) и управления статическим текстом (TStatic). OWL поддерживает также применяемые в приложеяиях классы управления настройкой. К примеру, элемент, представленный классом TGauge, отображает вертикальную и горизонтальную шкалы, показывающие, насколько процесс близок к завершению. Вертикальная и горизонтальная шкалы, включенные в классы THSlider и TVSlider, позволяют выбрать величину из заданного диапазона.

Графика

    Поскольку Windows представляет собой графический интерфейс пользователя (GUI), приложения в большей степени зависят от предоставляемых Windows графических средств. Эти средства и составляют графический аппаратный интерфейс (GDI) Windows. С целью сделать функции GDI более доступными, в ObjectWindows реализованы десять специальных клзссов. Сюда входят классы контекстов устройств (TDC), кисти (ТРеn), пиктограммы (иконки) (TIcon), растровые изображения (TBitmap), курсоры (TCursor), шрифты (TFont), палитры (TPalette), аппаратно-независимые растровые изображения (TDib) и области (TRegion).

    Класс TDC является основным классом для других специальных классов контекстов устройств (DC). Этот класс содержит большинство GDI-функций Windows таких, как рисование форм, отображение текста, кнопок и растровых изображений, задание режима рисования, выбор и восстановление объектов GDI, задание цвета и другие. Специальные классы DC включают контексты окна (TWindowDC), закраски (TPaintDC), метафайла (TMetafileDC), памяти (TMemoryDC) и принтера (TPrintDC). Каждый класс DC включает множество функций, осуществляющих вызов стандартных, относящихся к данному контексту устройства (DC) функций Windows. Например, класс TPrintDC поддерживает функции запуска и остановки принтера, инициализации и завершения страницы, задания числа копий, снятия документа и другие.


    Замечание. В Windows-приложении вывод на экран гораздо более сложен, чем в программах, работающих под DOS. Для вывода на экран в Windows-приложении необходимо вначале получить контекст устройства (DC) для окна, в которое выводится информация. DC - это структура данных, содержащая разного рода графические установки для данного устройства, включая перо, кисть, типы линий, а также информация о цвете и форме отображения. Хотя чаще всего устройством является окно на экране, контекст требуется и для таких устройств, как принтер.

Печать

    Аппаратная независимость Windows, поддерживаемая большим количеством возможных драйверов, приводит к тому, что вывод на принтер н Windows - задача непростая. Но теперь, благодаря новым классам OWL, можно напечатать документ любого типа. В частности, для управления заданиями для принтера OWL поддерживает два класса: класс TPrinter, включающий функции принтера и поддержку драйверов, и класс TPrintout, отвечающий за подготовку документа к печати. Оба эти класса вместе служат для получения твердых копий с помощью установленного в данный момент принтера,

    Когда вы создаете объект, относящийся к классу TPrinter, приложение автоматически связывается с принтером пользователя, заданным по умолчанию. Объект TPrintout, будучи весьма мощным средством, позволяет также легко напечатать простой, в одну страницу, документ с помощью одной-единственной функции, как и осуществить вывод в область окна с помощью оконной функции закраски. Для более сложных многостраничных документов TPrintout помогает произвести разбивку на страницы, компоновку, управлять размером страниц и взаимодействовать с пользователем через специальное окно диалога.

    В OWL включен также класс TPreviewPage, позволяющий с минимальными усилиями реализовать функцию предварительного просмотра. С помощью этой функция пользователь может отобразить на экране окно с данными, которые он собирается напечатать.

Контроль ввода

    Другой громоздкой функцией при написании Windows-программ является контроль содержимого окон диалога после ввода данных пользователем. Пять специальных классов, осуществляющих контроль, а именно: TFilterValidator, TRangeValidator, TLookupValidator, TStringLookupValidator и TPXPictureValidator - позволяют проверять вводимые данные на допустимые символы, диапазон, идентифицировать принадлежность элемента к таблице допустимых ответов и применять шаблон при вводе.

    Для использования объекта-контролера необходимо лишь создать этот объект и связать его с нужной строкой редактирования. Эта строка осуществляет затем автоматический доступ к контролеру, выполняя проверку без малейшего участия с вашей стороны. Разумеется, вы можете написать свои собственные настраиваемые классы контроля данных, перекрывая функции базового класса TValidator.

Просмотр документов

    Большинство Windows-приложений имеет дело с обработкой документов того или иного вида. Текстовые процессоры работают с текстовыми файлами, графические редакторы - с изображениями, генераторы звуковых эффектов - со звуковыми файлами. В некоторых случаях приложение должно уметь обработать документ несколькими способами. Например, редактор файлов может обрабатывать как текстовые ASCII-файлы, так и двоичные данные, выводимые на экран в двоичном или шестнадцатиричном формате. Чтобы помочь вести обработку документов, OWL предлагает модель Doc/View, включающую объект документа, объект просмотра и обработчик документа.

    OWL-объект документа, представленный классом TDocument, может содержать данные любого типа. Этот класс поддерживает функции обработки документа и просмотра, связанного с этим документом. Например, вы можете открыть и закрыть документ, получить или задать соответствующий путь к директорию, получить или задать заголовок документа, проверить, вносились ли в документ изменения, и сообщить объекту просмотра об этих изменениях.

    Объект просмотра, относящийся к классу TView, представляет собой функциональную прослойку между документом и интерфейсной частью, используемой для его обработки (например, окном или диалоговым окном). Просмотр позволяет отображать данные различными способами и дает пользователю возможность их обрабатывать. Чтобы извлечь из просмотра дополнительную пользу, вы должны переписать ряд виртуальных функций класса, заставляя их работать гак, как требуется для данного типа просмотра. Один документ может быть связан с несколькими различными объектами просмотра.

Буфер обмена

    Одним из многих преимуществ Windows является возможность обмена данными между приложениями. Наиболее распространенным механизмом такой передачи является буфер обмена (Clipboard). Данные могут быть вырезаны или скопированы в буфер обмена одного приложения, а затем переданы оттуда в документ другого приложения.

    Поскольку буфер обмена регулярно используется в Windows-программах, в OWL существует класс TClipboard, вобравший в себя множество функций Windows для работы с буфером обмена. Используя TClipboard, вы можете открыть и закрыть буфер, очистить его, проверить формат данных, хранящихся в нем, копировать в него и извлекать из него данные, а также выполнить любую из других 14 функций работы с буфером обмена.

    OWL включает также специальный класс TClipboardViewer, который автоматически добавляется и удаляется из цепочки Windows, осуществляющей просмотр буфера обмена. Этот класс поддерживает также ответы на сообщения, генерируемые Windows для просмотра буфера обмена.

    Со следующего шага мы начнем рассматривать вопросы, связанные с созданием и использованием окон.




Содержание Следующий шаг