Главная :: Программы для программирования :: wxWidgets :: Перевод книги "Programming with wxWidgets" :: Глава I – Введение. Часть 3
Plug&Pray

Глава I – Введение. Часть 3

Лицензионное соглашение

Лицензия wxWidgets (официально, по историческим и юридическим причинам называемая <<лицензией wxWindows>>) является лицензией LGPL с некоторыми изменениями. Вы можете подробно ознакомиться с текстом лицензии, который доступен на сайте проекта или в каталоге docs дистрибутива, однако вкратце его суть такова: вы можете использовать wxWidgets в коммерческих или открытых проектах абсолютно бесплатно. Вы можете линковать библиотеку как статически, так и динамически. В любом из случаев, вы не обязаны делать доступными ваш собственный исходный код или объектные файлы, однако если вы делаете изменения в коде самой библиотеки, то вы обязаны предоставить всем доступ к этим изменениям бесплатно. Также желательно ознакомиться с лицензией отдельных компонентов, являющихся частью wxWidgets, таких как библиотеки по работе с PNG и JPEG.

Исходный код, который поставляется с данной книгой, публикуется под лицензией wxWindows.

Архитектура wxWidgets

Таблица ref{wxapi} показывает четыре концептуальных уровня: внешний API wxWidgets, основной порт, API платформы, используемый этим портом и, наконец, название операционной системы.

Далее мы перечислим основные порты wxWidgets, которые существовали на время написания книги.

wxMSW

Этот порт компилируется и запускается на всех 32-х и 64-х битных версиях Microsoft Windows, включая Windows 95, Windows 98, Windows ME, Windows NT, Windows 2000, Windows XP и Windows 2003. Он также может быть скомпилирован при использовании библиотеки Winelib под Linux. Также существует рабочая конфигурация под Windows CE (см. <>). Порт wxMSW может быть сконфигурирован для использования wxUniversal, вместо стандартных Win32 элементов.

wxGTK

wxWidgets для GTK+ может использовать элементы GTK+ версии 1.x или 2.x на любой из разновидностей Unix, поддерживающих X11 и GTK+ (например, Linux, Solaris, HP-UX, IRIX, FreeBSD, OpenBSD, AIX и других). Библиотека также может работать на встраиваемых платформах с достаточными для этого ресурсами, например, в среде GPE Palmtop (смотрите рис.~ref{pic1_4}). wxGTK является рекомендуемым портом для всех Unix-систем.

wxX11

wxWidgets для X11 использует набор элементов из wxUniversal и запускается непосредственно в Xlib, которая не имеет собственных элементов управления. Это обстоятельство делает порт подходящим для встраиваемых систем, но при его можно использовать и для построения приложений, которым не хотелось бы иметь зависимости от GTK+. Библиотека позволяет запускать приложение на любой Unix-системе, где может быть запущен X11. Порт wxX11 не является таким же развитым, как и wxGTK. На рис.~ref{pic1_5} показана игра <>, скомпилированная вместе с портом wxX11 и запущенная в системе Familiar Linux/TinyX на iPAQ PDA.

wxMotif

Этот порт может использовать Motif, OpenMotif или Lesstif на большинстве Unix-систем. Sun Microsystems оценивает функциональность своей библиотеки между GTK+ и GNOME, поэтому использование Motif не является желательной опцией для большинства разработчиков и пользователей.

wxMac

wxMac нацелен на запуск приложений в среде Mac OS 9 (требуется версия не меньшая 9.1) и Mac OS X (требуется версия не меньшая 10.2.8). Чтобы компилировать приложения для Mac OS 9 вам потребуются утилиты из Metrowerks CodeWarrior. Для Mac OS X вы можете использовать как Metrowerks CodeWarrior, так и Apple tools. В последнем случае вам необходимо использовать Xcode версии 1.5 или выше. Если вы любите пользоваться командной строкой, то можно обойтись компилятором GCC версии 3.3 или выше.

wxCocoa

Этот порт еще находится в процессе разработки и предназначен для использования Cocoa API, впервые появившейся в Mac OS X. Хотя функциональность Carbon и Cocoa очень похожа, но этот порт имеет потенциальную возможность поддержки среды GNUStep на платформах, отличных от Mac.

wxWinCE

Порт Windows CE является оболочкой над различными SDK для систем на базе Windows CE, включая Pocket PC and Smartphone. Основной частью данного порта является порт для Win32 wxMSW с ограничениями и добавлениями для работы на малых платформах. Рис.~ref{pic1_6} показывает игру <>, запущенную в эмуляторе Pocket PC 2003. На рис.~ref{pic1_7} показаны четыре экрана примера <

> из поставки wxWidgets, запущенного на Smartphone 2003 с экраном 176?220 пикселей. Как вы видите wxWidgets сделал адаптацию приложения для этих платформ, включающую создание специального меню, вместо обычного, так как Smartphon поддерживает только две кнопки в меню. Требуются дополнительные подсказки от приложения, такие как вызов SetLeftMenu и SetRightMenu вместо добавления кнопок OK и Cancel в диалог.

wxPalmOS

Этот порт предназначен для Palm OS 6 (Cobalt). В данный момент (на момент написания книги) он практически нефункционален, однако может быть использован для компиляции и запуска примера <> в эмуляторе Palm OS 6 (смотрите рис.~ref{pic1_8}).

wxOS2

Порт wxOS2 является менеджером отображения для OS/2 или eComStation.

wxMGL

Этот порт направлен на использование низкоуровневого графического слоя MGL от SciTech Software, Inc. и использует элементы wxUniversal.

Внутренняя организация

Внутри код wxWidgets разделен на шесть слоев:

Каждый порт берет все, что ему необходимо из этих уровней и реализует API библиотеки wxWidgets.

Как wxWidgets узнает какие классы необходимо использовать во время компиляции? Когда вы включаете в программу заголовочные файлы wxWidgets, такие как wx/textctrl.h, в программу включается определяемый целевой платформой файл (в случае с Windows это файл wx/msw/textctrl.h) в соответствии с директивами в файле wx/textctrl.h. Далее ваша программа линкуется вместе с библиотекой, которая была скомпилирована с подходящими настройками. Одновременно может существовать несколько конфигураций библиотеки, в частности, версии Debug и Release, а также динамическая и статическая версии библиотеки. У вас есть возможность выключить некоторые компоненты при сборке wxWidgets, или сделать выбор между сборками с поддержкой Unicode или ANSI, редактируя для этого файл setup.h или используя опции для конфигурации, вид которых зависит от используемого вами компилятора. Дополнительная информация доступна в Приложении 1 <<Установка wxWidgets>>.

Обращаем ваше внимание на то, что хотя wxWidgets и является оболочкой над каждым родным API, но она не запрещает писать специфический для платформы код, если это необходимо. Однако такая необходимость возникает очень редко.

Итоги

В этой главе вы узнали, что такое библиотека wxWidgets, историю ее развития, назначение всех доступных портов и немного о внутреннем устройстве библиотеки. В следующей главе мы подробно разберем наше первое приложение, написанное с использованием wxWidgets.