Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОУК / 09 семестр / Книги и методические указания / Руководство программиста в Photon.doc
Источник:
Скачиваний:
364
Добавлен:
04.03.2014
Размер:
7.99 Mб
Скачать

Ресурсы 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);

PtSetResources(ABW_shapes_cbox, 1, args);

Установка того же ресурса функцией PtSetResource() выглядит так:

PtSetResource(ABW_shapes_cbox, Pt_ARG_BEVEL_WIDTH, 5, 0);

Это выполняется всего одним вызовом функции и не требует никакого массива args.