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

Ресурсы link (указательный метод)

Если Вы получаете ресурсы связанного списка, используя метод указателя:

  • Аргумент value в PtSetArg() является адресом указателя на списочную структуру типа PtLinkedList_t. Эта структура содержит по меньшей мере:

struct Pt_linked_list *next указатель на следующий пункт списка;

char data[1] адрес данных, хранящихся в списке;

  • len не используется.

Когда вызывается PtGetResources(), указатель, заданный в value, устанавливается указывающим на первый узел связанного списка во внутренних данных виджета.

 Если Вы получаете ресурс ответной реакции, аргумент value в PtSetArg() является адресом указателя на структуру типа PtCallbackList_t. Для получения более полной информации см. раздел "Проверка ответных реакций" в главе "Управление виджетами в исходном коде приложения".

Ресурсы struct (указательный метод)

Если Вы получаете ресурсы структуры, используя метод указателя:

  • Аргумент value в PtSetArg() является адресом указателя соответствующего типа языка С.

  • len не используется.

Когда вызывается функция PtGetResources(), заданный указатель для ресурса структуры устанавливается указывающим на внутреннее хранилище виджета.

Ресурсы boolean (указательный метод)

Если Вы получаете булевский ресурс, используя метод указателя:

  • Аргумент value в PtSetArg() является указателем на int.

  • len не используется.

Когда вызывается функция PtGetResources(), int устанавливается в 1, если булевское значение "истина", или в 0, если "ложь". Например, чтобы получить значение ресурса Pt_ARG_CURSOR_OVERRIDE в виджете типа PtContainer:

PtArg_t arg;

int bool_value;

PtSetArg( &arg[0], Pt_ARG_CURSOR_OVERRIDE, &bool_value, 0 );

PtGetResources (ABW_container, 1, arg);

if ( bool_value ) {

/* Курсор контейнера перекрывает курсор своих детей. */

}

Вызов функции PtGetResources()

Используйте функцию PtGetResources(), чтобы получить значения каждого ресурса, определённого в списке аргументов:

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

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

PtGetResources() возвращает 0 в случае успеха или –1, если случается ошибка. Возврат кода, равного –1, может указывать на то, что Вы пытаетесь получить значение ресурса, который для виджета не определён.

Получение одного ресурса

Если Вы получаете значение одного ресурса, проще использовать вместо функции PtGetResources() функцию PtGetResource(). Для функции PtGetResource() Вам нет необходимости устанавливать список аргументов. Аргументами PtGetResource() являются:

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

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

Вот пример получения одного ресурса функцией PtGetResources() и указательного метода:

unsigned short *width;

PtArg_t arg;

PtSetArg( &arg, Pt_ARG_BEVEL_WIDTH, &width, 0 );

PtGetResources( widget, 1, &arg );

При использовании функции PtGetResource() код имеет такой вид:

unsigned short *width;

PtGetResource( widget, Pt_ARG_BEVEL_WIDTH, &width, 0 );

PtGetResource() возвращает указатель непосредственно во внутреннюю память виджета. Не пытайтесь модифицировать ресурс, напрямую используя этот указатель. Такая модификация не приведёт к ожидаемому эффекту и вызовет ошибки поведения виджета. Никогда не освобождайте указатель – результатом этого наверняка будет ошибка памяти или другая сходная ошибка. Использование указателя const поможет избежать таких проблем.

Изменение состояния виджета может сделать указатель потерявшим силу, используйте его сразу же.