Руководство программиста в Photon, страница 2
Описание файла
Документ из архива "Руководство программиста в Photon", который расположен в категории "". Всё это находится в предмете "программное обеспечение управляющих комплексов (поук)" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "поук" в общих файлах.
Онлайн просмотр документа "Руководство программиста в Photon"
Текст 2 страницы из документа "Руководство программиста в Photon"
Освобождение контекста печати 294
Пример 294
Глава 21. "Тащить и бросать" 297
Механизм транспортировки 297
Использование "тащи и бросай" 298
Запуск операции "тащи и бросай" 298
Получение событий "тащи и бросай" 300
Отмена операции "тащи и бросай" 302
Регистрация новых транспортных типов 303
Простая структура данных 303
Более сложная структура 305
Транспортные функции 308
Глава 22. Регионы 310
Координатное пространство Photon'а 310
Координаты региона 311
Начало координат региона 311
Начальные размеры и расположение 311
О регионах потомка 312
Регионы и отсечение событий 313
Месторасположение и иерархия 313
Использование регионов 316
Открытие региона 316
Размещение регионов 317
Системная информация 318
Глава 23. События 319
События мыши 319
Генерирование событий 321
Нацеливание на определённые регионы 322
Нацеливание на определённые виджеты 322
События, генерируемые клавиатурными клавишами 322
Координаты события 323
Обработчики события – необработанные и отфильтрованные ответные реакции 324
Накопление событий 325
Сжатие событий 326
Перетаскивание 326
Инициализация перетаскивания 326
Контурное перетаскивание 327
Непрозрачное перетаскивание 328
Обработка событий перетаскивания 328
Глава 24. Управление окнами 331
Флаги управления окнами 331
Флаги отображения окна 331
Флаги управления окном 332
Оконные флаги уведомления 332
Ответная реакция уведомления 333
Получение и установка состояния окна 334
Управление несколькими окнами 336
Функции управления окнами 336
Запуск самостоятельного приложения 336
Модальные диалоги 337
Глава 25. Программирование в Photon'е без PhAB'а 341
Основные шаги 341
Компилирование и линковка не PhAB'овского приложения 341
Образец приложения 342
Что происходит 342
Подсоединение программного кода приложения к виджету 344
Ответные реакции 345
Обработка событий 345
Полный пример приложения 345
Приложение 1. Архитектура Photon'а 347
Пространство событий 347
Регионы и события 348
События 348
Начальный набор прямоугольников 348
Накопленный набор прямоугольников 348
Регионы 349
Чувствительность 350
Непрозрачность 350
Краткая сводка атрибутов 350
Регистрация событий (event logging) 350
Модификация событий 351
Взаимосвязь родитель/потомок 351
Координатное пространство Photon'а 351
Корневой регион 351
Типы событий 351
Как владельцы регионов уведомляются о событиях 352
Упорядоченный опрос 352
Синхронное уведомление 352
Асинхронное уведомление 352
Регион устройств 353
Фокусировка указателя 353
Фокусировка клавиатуры 353
События перетаскивания 353
Событие "тащи и бросай" 353
Драйверы фотона 354
Драйверы ввода 354
Драйверы вывода 354
Оконный менеджер Photon'а 355
Регионы оконных рамок 356
Регион фокусировки 356
Регион рабочей области 356
Регион фона 356
ПРИЛОЖЕНИЕ 2. ОБЗОР ВИДЖЕТОВ 357
Приложение 3. Поддержка многоязычности Unicode 360
Широкие и многобайтовые символы 360
Unicode 360
UTF-8 кодирование 361
Функции преобразования 362
Другие кодировки 362
Драйверы клавиатуры 363
Слепые клавиши (dead keys) и скомпонованные последовательности 363
Скомпонованные последовательности Photon'а 364
Приложение 4. Photon во встроенных системах 367
Принимаемые допущения 367
Введение 367
Шаг 1. Экспорт переменной окружения PHOTON_PATH 368
Шаг 2. Запуск сервера Photon'а 369
Шаг 3. Запуск драйверов ввода 369
Шаг 4. Запуск менеджера шрифтов 370
Конфигурирование шрифтов 370
Запуск сервера шрифтов 371
Шаг 5. Переключение в графический режим 372
Установка карты в правильный режим 372
Шаг 6. Запуск графического драйвера 373
Шаг 7. Запуск оконного менеджера 374
Необходимые файлы 374
Шаг 8. Запуск Вашего приложения 374
Необходимые файлы 374
Пояснения 374
Флэш-файловая система 375
Графика 375
Пример 376
Требуемые бинарные файлы 376
Требующиеся библиотеки 377
Требуемые шрифты 378
Службы шрифтов 379
Сборка всего этого в единое целое 380
Полезные советы 382
Приложение 5. Использование PhAB под Microsoft Windows 383
Photon в одиночном окне 383
Завершение PhAB 383
Дополнительные опции 384
Файловые имена с буквами в обоих регистрах 384
DDD – Отладчик Отображения Данных 384
Строка запуска отладчика 385
Функциональность панели управления ресурсами 385
Разработка индивидуальных виджетов и PhAB 386
Статическое линкование Ваших индивидуальных виджетов 386
Глоссарий 388
Ненеобходимое послесловие переводчика. 398
Небольшое пояснение переводчика
Это «Руководство программиста в Photon» представляет собой ну очень черновой вариант перевода, осуществлённый исключительно в ДСП-целях. Перевод писался, во-первых, в спешке, во-вторых, урывками. Поэтому читатель не найдёт здесь ни выверенных формулировок, ни корректного соответствия оригиналу, ни точности в терминах, ни… В общем, это просто “stub”, как выражаются в этой книге. Когда переводчик не понимал того, что написано, он не пытался вникать в суть, а, махнув рукой, писал что-то полувнятное и мчался дальше.
Кроме того, читатель вправе спросить, почему такие странные рисунки. Отвечаю: да, конечно, можно было просто скопировать в документ рисунки из оригинала, которые, в свою очередь, являются просто съёмками с экрана. Но. Такие рисунки плохо обрабатываются матричным принтером (счастливым обладателем какового является переводчик) – медленно и грязно. Поэтому оригинальные рисунки и заменены тем, что можно было бы назвать карикатурами, если бы не явное отсутствие таланта вышеупомянутого переводчика. Впрочем, мне кажется, произвести замену этих рисунков на оригинальные достаточно легко и быстро выполнимо. Было бы желание.
В заключение прошу прощения у всех тех, кому придётся читать это. Не надо ругать переводчика, ибо это даже не случай «не стреляйте в тапёра – он играет как может»: пресловутый переводчик совсем не может. Просто нужда заставила, соображения, что программистам, не владеющим английским, лучше прочитать это, чем вообще ничего.
Очень черновой перевод by Зайцев В.
От того, кто правил
Я постарался сделать этот текст более удобным для чтения как с экрана, так и в отпечатанном виде. Кроме того, где это было необходимо привел текст в соответствие с текущей редакцией на сайте QSSL. Для лучшего восприятия текста я все-таки заменил большую часть картинок в тексте на оригинальные – думаю так проще людям, впервые увидившим PhAB и иже с ним разобраться что к чему.
Горе-редактор Попелов М.
Введение
Итак, Вы уже, вероятно, увидели и испытали различные приложения Photon'а – оконный менеджер, просмотрщик Help'ов, игры и прочая – и готовы разрабатывать свои собственные приложения. Эта глава знакомит Вас с базовыми понятиями и концепциями, которые Вы будете использовать при разработке Photon'овских приложений.
В неё включены:
-
обзор архитектуры Photon'а;
-
построитель Photon'овских приложений – PhAB;
-
концепции виджетов;
-
образец программирования;
-
библиотеки Photon'а;
-
обзор построения приложений с помощью PhAB;
-
написание приложений без PhAB.
Обзор архитектуры Photon'а
Менеджер Photon'а функционирует, как маленький сервер-процесс, включающий лишь несколько основных примитивов. Он создаёт трёхмерное пространство событий, заполненное областями и событиями. Этот менеджер не способен рисовать что-либо или работать с мышью, клавиатурой, пером.
Внешние, необязательные процессы – включая драйверы устройств, оконный менеджер или другие менеджеры – обеспечивают высокоуровневое функционирование оконной системы. Они связываются путём генерации событий в Photon'овском пространстве событий. Приложение Photon'а состоит из одной или более плоских, прямоугольных областей, которые действуют как "агенты" приложений в пространстве событий. Приложение рисует внутри области. Области сложены одна поверх другой в пространстве событий Photon'а. Область может иметь родительскую область и область одного с ней уровня (сёстры-области). Пользователь пребывает вовне пространства событий, наблюдая его спереди. Глубоко сзади в пространстве событий расположена особая область, называемая корневой областью (см. рис. 1).
Когда Вы запускаете приложение, Вы взаимодействуете с ним, и оно взаимодействует с другими приложениями и Photon'ом различным образом:
-
Вы нажимаете клавиши и кнопки мыши;
-
приложение выполняет графические операции;
-
и т.д.
Эти взаимодействия называются событиями, и они перемещаются между областями в пространстве событий подобно фотонам света.
Пространство событий
Рис. 1. Пространство событий Photon'а с точки зрения пользователя
Например:
Когда Вы нажимаете кнопку мыши, драйвер устройства генерирует событие и отсылает его назад через пространство событий (в сторону корневой области). Область, которая интересуется событием, может его перехватить и обработать, например, активизировав нажатие кнопки.
Когда Ваше приложение желает что-либо нарисовать, оно генерирует событие и отсылает его вперёд (в сторону пользователя). Драйвер может перехватить событие и сформировать изображение на экране.
Каждая область может определить, в каких областях она заинтересована, путём установки своей чувствительности и непрозрачности:
Область, чувствительная к определённому типу событий, уведомляет приложение всякий раз, когда такое событие пройдёт сквозь неё.
Область, непрозрачная к определённому типу событий, блокирует его путём отсечения своей собственной зоны от области событий.
Для получения более полной информации см. приложение к Архитектуре Photon'а.
Построитель Photon'овских приложений – PhAB
microGUI (микроГрафический Пользовательский Интерфейс) включает очень мощный инструмент разработки, называемый Построитель Приложений Photon'а (Photon Application Builder, сокращённо PhAB или appBuilder). Это инструмент визуального проектирования, генерирующий базовый код С и/или С++, обеспечивающий пользовательский интерфейс для Ваших приложений. С помощью PhAB Вы можете в чрезвычайной степени уменьшить объём программирования, требуемый для построения Вашего приложения. Вы можете сэкономить не только время, необходимое для написания части Вашего кода, относящегося к пользовательскому интерфейсу, но также время на отладку и тестирование. PhAB поможет Вам получить Ваши приложения более быстро продаваемыми и с более профессиональными результатами.
PhAB берёт на себя задачу о проектировании и создании окон, меню, диалогов, иконок, виджетов (кнопок, меток и прочая), и обратной реакции виджетов со многими расширениями. PhAB даёт Вам возможность получить доступ и создавать модули PhAB внутри Вашего собственного кода. Он также предоставляет набор функций-утилит для установки базы данных виджетов, которые Вы сможете использовать многократно столько раз, сколько потребуется, а не создавать виджеты с нуля.
Получение немедленных результатов
PhAB позволяет Вам избежать процесса создания пользовательского интерфейса вручную методом проб и ошибок. Вместо написания кода для каждой кнопки, окна и иных виджетов, Вы создаёте желаемые вам виджеты просто "указав и кликнув1".
Как только вы создали виджет, PhAB отображает его на экране вместе со всеми ресурсами, управляющими тем, как данный виджет выглядит и ведёт себя. Изменить любой ресурс виджета легко – просто щёлкните на ресурсе, выберите новое значение, и дело сделано. Так же легко переместить виджет или изменить его размеры – просто укажите на виджет и перетащите его мышкой.
Концентрация на функциональности
Подобно другим средам разработки GUI (Графическим Пользовательским Интерфейсам), PhAB позволяет Вам прикрепить коды функций к ответным реакциям виджетов (callback – ответная реакция в вольном переводе, это термин PhAB, особая вкладка в PhAB. Прим. пер.), обеспечивая Вашему приложению функциональность. Например, Вы можете прикрепить код функции к кнопке, так что функция будет вызываться каждый раз, когда пользователь щёлкнет на кнопке.
Далее, PhAB не принуждает Вас писать и прикреплять код, необходимый для "склеивания" вместе различных частей Вашего интерфейса. Вместо этого Вы можете прикрепить ответные реакции виджетов непосредственно к любому окну, диалогу или меню. Единственный код, о котором Вам придётся беспокоится – это код, специфический для Вашего приложения.
Создание прототипов без написания кода
Как только Вы завершили любую часть пользовательского интерфейса, Вы можете, имея PhAB, сгенерировать весь С и/или С++ код, требуемый для того, чтобы оживить интерфейс, что означает, что Вы можете создать полностью прототип, не написав ни строчки кода.
После того, как Вы сгенерировали и откомпилировали код, Вы можете запустить прототип на выполнение, чтобы посмотреть, как интерфейс функционирует. Например, если Вы связали с диалогом кнопку, щелчок на кнопке приведёт к всплытию диалогового окна. Вы немедленно почувствуете, как интерфейс будет "ощущать" пользователя. Фактически PhAB делает процесс построения и тестирования настолько эффективным, что Вы можете даже сидеть с Вашими пользователями и проектировать прототипы вместе.
После завершения проектирования прототипа, Вы можете встроить его в Ваше действующее приложение. Или Вы можете в любой момент остановить разработку прототипа, написать какие-то функции обратной связи, поэкспериментировать, как они работают, и затем вернуться к проектированию прототипа. Вы всегда можете провести тонкую регулировку всех аспектов Вашего приложения и делать всё, что пожелаете, пока приложение работает.
Сокращение размера кода
Вашему приложению может понадобиться использовать в различных частях его интерфейса одни и те же виджеты. С PhAB Вам не понадобится устанавливать их каждый раз, когда в этом появится нужда. Вместо этого Вы однажды определяете виджеты, помещаете их в базу данных виджетов и затем, используя функции языка С, обеспечиваемые PhAB, используете эти виджеты, когда Вам понадобится. Применяя такой подход, Вы можете уменьшить размер кода, требуемого для создания виджета, до одной строки.
Создание последовательных приложений
С PhAB Вам редко понадобится разрабатывать приложение с нуля. Например, если Вы уже создали окна и диалоги в существующем приложении, вы можете свободно перебросить их в новое приложение. Вы можете также создать центральную базу данных виджетов, чтобы импортировать их во все Ваши приложения для создания единообразного вида и реагирования.
Создание всех разновидностей приложений
С PhAB вы можете ускорить разработку без ухудшения функциональности. Вы можете создавать все разновидности приложений. Например, мы использовали PhAB для разработки почти всех приложений, поставляемых с Photon'ом, включая просмотрщик файлов помощи (Helpviewer), терминал (Terminal application), менеджер рабочего стола (Desktop Manager), копировщик экрана (Snapshot), все игры и “демки” – даже, собственно, сам PhAB!
Лучшим введением в PhAB является использование его, так что начинайте работать, используя руководства. Через очень короткое время Вы будете способны собрать воедино очень специализированные прототипы. Когда Вы будете готовы начать программирование своего приложения, Вы сможете прочитать разделы, имеющие отношение к тем виджетам, которые Вы захотите использовать. Мы снабдили полными исходными кодами все “демки” и игры, созданные с помощью PhAB. Вы можете загрузить любой из них в PhAB и изучить для использования идей в Ваших собственных приложениях. Хорошим примером, использующим большую часть возможностей PhAB, является приложение ВидеоПокер.
Концепции виджетов
При создании нового пользовательского интерфейса (UI), проще собрать интерфейс из набора стандартных компонентов, таких как ползунки, списки, меню и кнопки, нежели реализовывать каждый из элементов UI с нуля. Каждый стандартный компонент, включённый в UI, является объектом, называемым виджетом.