Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
51
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
          1. Ресурсы pointer

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

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

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

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

my_struct *user_data;

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

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

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

          1. Ресурсы Link

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

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

Pt_LINK_INSERT

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

Pt_LINK_DELETE

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

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

          1. Ресурсы struct

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

          1. Ресурсы boolean

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

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

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

          1. Вызов 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() была вызвана из функции ответной реакции или из функции обработки события, изменения в виджете не будут видны до тех пор, пока не будут выполнены все ответные реакции из списка ответных реакций и все обработчики событий.

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