Главная » Просмотр файлов » Руководство программиста в Photon

Руководство программиста в Photon (1037671), страница 31

Файл №1037671 Руководство программиста в Photon (Раздаточные материалы) 31 страницаРуководство программиста в Photon (1037671) страница 312017-12-25СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 31)

Чтобы инициализировать каждый элемент списка аргументов, можно использовать макрос PtSetArg():

PtSetArg( PtArg_t *arg, long type, long value, long len);

 Если значение не требуется вычислять во время исполнения, Вы можете для инициализации списка аргументов использовать вместо этого функцию Pt_ARG(). Для получения более полной информации см. "Справочник библиотечных функций Photon".

Первые два аргумента в PtSetArg() являются адресом элемента списка аргументов и именем ресурса. Третий и четвёртый аргументы варьируются в зависимости от типа ресурса и используются либо для установки, либо для получения значения ресурса. Когда ресурс устанавливается, третий аргумент всегда используется для хранения значения ресурса или адреса на значение ресурса. Четвёртый аргумент используется либо как указатель размера, либо как маска, в зависимости от типа определяемого значения. Ниже в таблице приведены возможные типы ресурсов:

тип

описание

Alloc

Объект памяти произвольного размера

Array

Массив

Boolean

Бит, который может быть либо выставлен, либо сброшен

Color

Цвет

Complex

Ресурс, который обрабатывается особым образом; см. ниже

Flag

Значение, в котором каждый бит имеет свой смысл

Function

Указатель на функцию

Image

Указатель на структуру PhImage_t

Link

Связанный список

Pointer

Указатель на адрес, который Вы определяете

Scalar

Значение, которое может быть представлено в одном long

String

Завершающаяся NULL-ом строка

Struct

Тип данных фиксированного размера, обычно структура, float или double

Для получения информации по ресурсам, оговоренным для каждого виджета, см. "Справочник виджетов Photon'a".

 Ресурсы compex являются особыми; для получения инструкций по их установке и получению значения см. их описание в "Справочнике виджетов Photon'a". Виджеты, имеющие комплексные ресурсы, обычно имеют функции, облегчающие работу с ними.

Установка ресурсов

Помните, что есть два шага, связанные с установкой значений более чем одного ресурса:

  • Установка списка аргументов с использованием макроса PtSetArg()

  • Установка значения с использованием функции PtSetResources().

Если Вы устанавливаете один ресурс, проще использовать PtSetResource() – Вам нет нужды устанавливать список аргументов. См. раздел "Установка одного ресурса" ниже.

Списки аргументов для установки ресурсов

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

PtArg_t args[5];

После инициализации списка аргументов, Вы фактически установили ресурсы.

Ресурсы scalar и color

При установке скалярного ресурса Вы задаёте значение как третий аргумент в PtSetArg(). Четвёртый аргумент не используется и должен быть установлен в 0. Например, чтобы установить ширину фаски в виджете типа "combo box", передайте новое значение как третий аргумент:

PtSetArg(&args[0], Pt_ARG_BEVEL_WIDTH, 5, 0);

Когда Вы вызываете PtSetResources(), виджет копирует скалярное значение в свою собственную внутреннююю структуру данных.

Ресурсы string

Установка строкового значения схожа с установкой скалярного; Вы задаёте строку как третий аргумент макроса PtSetArg(). Четвёртый аргумент – это число копируемых байт; если он равен 0, для определения длины строки используется strlen().

Например, чтобы установить текст по умолчанию для виджета типа "combo box", Вы должны задать значение ресурса Pt_ARG_TEXT_STRING в элементе под номером один списка аргументов:

PtSetArg(&args[1], Pt_ARG_TEXT_STRING, "Rectangle", 0);

Когда Вы вызываете PtSetResources(), виджет копирует строку в свою собственную внутреннюю структуру данных. Если Вам необходимо использовать международные (не-ASCII) символы в строке [читай – русский текст. Прим. пер.], следуйте одним из этих решений:

  • Определите строку в базе данных виджетов и используйте редактор языка для перевода строки. См. главу "Поддержка международных языков".

  • Используйте ped или иной UTF-совместимый текстовый редактор, чтобы отредактировать код С приложения. Вы можете затем использовать формирующие последовательности, описанные в разделе "Формирующие последовательности Photon'a" приложения "Поддержка многоязычности Unicode".

 Большинство консольных редакторов, таких как elvis и vedit, не являются UTF-совместимыми. Для получения более подробной информации по редактору ped см. книгу "Справочник утилит QNX6".

  • Разыщите требуемый символ в <photon/PkKeyDef.h>, используйте wctomb(), чтобы конвертировать символ из Unicode в UTF-8, и затем впишите шестнадцатиричный код в Вашу строку. Например, французское слово "rèsumè" будет закодировано как "r\xC3\xA9sum\xC3\xA9" – тяжело для чтения, но зато работает со всеми редакторами. Для получения более полной информации по Unicode и UTF-8 см. приложение "Поддержка многоязычности Unicode".

Ресурсы alloc

Некоторые ресурсы спроектированы для хранения выделенного блока памяти. Например, каждый виджет включает ресурс Pt_ARG_USER_DATA, который Вы можете использовать для хранения каких-то данных, которые Вы хотите иметь во внутренней памяти виджета. Для установки этого ресурса передайте указатель на данные как третий аргумент в PtSetArg(). Четвёртым аргументом является размер блока памяти в байтах:

my_struct user_data;

/* Инициализация данных */

PtSetArg(&args[2], Pt_ARG_USER_DATA, &user_data, sizeof(user_data));

Когда Вы вызовете PtSetResources(), виджет скопирует данное количество байт в свою внутреннюю память.

Ресурсы image

Ресурсы образов спроектированы для хранения структуры PhImage_t. Например, виджет PtLabel имеет ресурс Pt_ARG_LABEL_IMAGE, который Вы можете использовать для хранения образа. Чтобы установить этот ресурс, создайте и инициализируйте структуру PhImage_t, затем передайте указатель на неё как третий аргумент в PtSetArg(). Четвёртый аргумент должен быть 0:

PhImage_t *my_image;

/* Создание и инициализация образа */

PtSetArg(&args[2], Pt_ARG_LABEL_IMAGE, my_image, 0);

Когда Вы вызовете PtSetResources(), виджет скопирует структуру образа (но не какую-либо память, на которую указывают члены структуры PtImage_t) в свою внутренюю память.

Ресурсы array

При установке значения массива третьим аргументом в PtSetArg() является адрес массива. Четвёртым аргументом является число элементов массива. Например, для установки Pt_ARG_ITEMS списка выборов для виджета типа "combo box", может использоваться следующий вход в список аргументов:

char* cbox_items[3] = {"Circle", "Rectangle", "Polygon"};

PtSetArg(&args[3], Pt_ARG_ITEMS, cbox_items, 3);

Когда Вы вызовете PtSetResources(), виджет скопирует содержание массива в свою собственную структуру данных.

Ресурсы flag

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

 В качестве значения используйте Pt_TRUE, Pt_FALSE или комбинацию определёных битов и их дополнений. Не используйте значения 1, поскольку это содержит просто один бит как таковой; этот бит может не соответствовать биту, который Вы пытаетесь установить.

Например, следующий список аргументов задаёт выставление флага Pt_COMBOBOX_STATIC в виджете типа combo box (так что combo box всегда отображает список пунктов):

PtSetArg(&args[4], Pt_ARG_CBOX_FLAGS, Pt_TRUE, Pt_COMBO BOX_STATIC);

Когда Вы вызовете PtSetResources(), виджет использует битовую маску для определения, какие биты в его внутреннем ресурсе флагов представлены для изменений. Он берёт значения битов из заданного значения.

Ресурсы function

При установке ресурса функции третьим аргументом для функции PtSetArg() передаётся указатель функции. Четвёртый аргумент игнорируется; установите его в 0. Например, чтобы задать функцию прорисовки виджета PtRaw, установите ресурс Pt_ARG_RAW_DRAW_F следующим образом:

PtSetArg(&args[0], Pt_ARG_RAW_DRAW_F, &my_raw_draw_fn, 0);

Когда Вы вызовете PtSetResources(), виджет скопирует указатель на ресурс.

Ресурсы pointer

При установке ресурса указатель должен задаваться третьим аргументом функции PtSetArg(). Четвёртый аргумент игнорируется и должен быть установлен в 0.

При вызове PtSetResources() виджет просто тупо делает копию указателя в ресурсе.

 Виджет не делает копию памяти, на которую ссылается указатель; не освобождайте память, пока виджет ещё ссылается на неё.

Например, каждый виджет включает ресурс Pt_ARG_POINTER, который Вы можете использовать для хранения во внутренней памяти виджета указателя на какие-либо произвольные данные. Виджет никогда не обращается к этим данным; это просто для использования им. Чтобы установить этот ресурс, выделите требуемую память и передайте указатель на неё как третий аргумент в PtSetArg(). Четвёртый аргумент установите в 0:

my_struct *user_data;

/* Выделение памяти и инициализация данных */

PtSetArg(&args[0], Pt_ARG_POINTER, user_data, 0);

Когда Вы вызываете PtSetResources(), виджет копирует значение указателя в свою внутреннюю память.

Ресурсы Link

При установке связного списка передайте адрес массива данных как третий аргумент в функцию PtSetArg(). Четвёртый аргумент имеет определённый специфический смысл:

num добавляет num пунктов (если num равен 0, добавляется один пункт)

Pt_LINK_INSERT

вставляет первый элемент массива в начало связного списка

Pt_LINK_DELETE

удаляет первый элемент списка, который совпадает с первым элементом массива

Когда Вы вызываете PtSetResources(), виджет копирует данные в свою внутреннюю память.

Ресурсы struct

При установке ресурса структуры передайте функции PtSetArg() в качестве третьего аргумента адрес данных. Четвёртый аргумент не используется и должен быть установлен в 0. Когда Вы вызываете PtSetResources(), виджет скопирует данные в свою внутреннюю память.

Ресурсы boolean

При установке булевского ресурса Вы должны задать значение как третий аргумент функции PtSetArg(), используя 0 как "ложь" и ненулевое значение в качестве "истина". Четвёртый аргумент не используется и должен быть установлен в 0. Например, чтобы задать для PtTerminal протокол ANSI, передайте в качестве третьего аргумента ненулевое значение:

PtSetArg(&args[1], Pt_ARG_TERM_ANSI_PROTOСOL, 1, 0);

При вызове PtSetResourses() виджет сбрасывает или устанавливает один бит в своей собственной структуре данных в зависимости от того, нулевое или ненулевое значение.

Вызов PtSetResources()

Как только Вы установили список аргументов, всё готово к тому, чтобы устанавливать ресурсы. Помните, что PtSetArg() не устанавливает ресурсы; эта функция только устанавливает список аргументов.

Вы можете использовать PtSetResources(), чтобы устанавливать новые значения ресурсов:

int PtSetResources(PtWidget_t *widget, int n_args, PtArg_t *args);

Аргументами этой функции являются указатель на виджет, число входов в список аргументов и сам список аргументов.

Вы можете также установить ресурсы передачей списка аргументов в функцию PtCreateWidget(). Правила задания значений в элементах списка аргументов те же самые. Для получения более полной информации см. раздел "Создание виджетов" в главе "Управление виджетами в коде приложения".

Например, Вы можете установить ресурсы виджета типа "combo box", используя список аргументов, созданный выше. Вызовите функцию PtSetResources() следующим образом:

PtSetResources(ABW_shapes_cbox, 5, args);

В ответ на изменение своего ресурса виджет может перерисовать себя. Вызов PtSetResources() послужит толчком к этому изменению. Любые изменения, появившиеся в виджете, не будут, однако, иметь эффекта до тех пор, пока не произойдёт восстановление управления в петлю обработки событий. Таким образом, если функция PtSetResources() была вызвана из функции ответной реакции или из функции обработки события, изменения в виджете не будут видны до тех пор, пока не будут выполнены все ответные реакции из списка ответных реакций и все обработчики событий.

Установка одного ресурса

Если Вы устанавливаете один ресурс, проще использовать вместо PtSetResources() функцию PtSetResource(). Для функции PtSetResource() Вам нет нужды устанавливать список аргументов.

Аргументы функции PtSetResource() являются комбинацией аргументов PtSetArg() и PtSetResources():

int PtSetResource(PtWidget_t *widget, long type, long value, long len);

widget – это указатель на виджет, ресурс которого мы устанавливаем. Другие аргументы устанавливаются просто так же, как для функции PtSetArg(), когда устанавливается более чем один ресурс. См. раздел "Списки аргументов для установки ресурсов" выше.

Например, установка одного ресурса через функцию PtSetResources() требует примерно такого кода:

PtArg_t args[1];

PtsetArg(&args[0], Pt_ARG_BEVEL_WIDTH, 5, 0);

Характеристики

Тип файла
Документ
Размер
7,62 Mb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6372
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее