Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литература_1 / photon_old.doc
Скачиваний:
38
Добавлен:
02.04.2015
Размер:
7.88 Mб
Скачать
          1. Вызов ответной реакции

Функция ответной реакции вызывается со следующими параметрами:

Pt_Widget_t *widget Виджет, послуживший причиной вызова функции ответной реакции, т.е. то, на чём произошло действие.

void *client_data Специфические для данного приложения данные, которые были присоединены к ответной реакции, когда та была зарегистрирована в виджете.

 Клиентские данные, которые передаются ответной реакции, добавляемой из Вашего программного кода, не являются такими же, как данные apinfo, передаваемые в ответные реакции PhAB.

PtCallbackInfo_t *call_data Указатель на структуру PtCallbackInfo_t (см. "Справочник виджетов Photon'а"), которая хранит данные, специфические для этого вызова ответной реакции. Она зависит от причин, по которым ответная реакция была вызвана, и может иметь данные, специфические для поведения ответной реакции.

Структура PtCallbackInfo_t определена как:

typedef struct Pt_callback_info {

unsigned long reason;

unsigned long reason_subtype;

PhEvent_t *event;

void *cbdata;

} PtCallbackInfo_t;

Элементы структуры PtCallbackInfo_t имеют следующий смысл:

  • reason

– указывает причину вызова ответной реакции; обычно это устанавливается на имя ресурса ответной реакции, чей список ответных реакций был вызван.

  • reason_subtype

– указывает конкретный тип ответной реакции, связанный с reason; для большинства ответных реакций это значение равно 0.

  • event

– указатель на структуру PhEvent_t (см. "Справочник библиотечных функций Photon'а"), которая описывает событие Photon'а, послужившее причиной вызова ответной реакции.

  • cbdata

– вызывает данные, которые являются специфическими для ресурса ответной реакции, послужившей причиной вызова функции ответной реакции.

Для получения более полной информации см. описание ответных реакций, определённых для каждого виджета, в "Справочнике виджетов".

          1. Удаление ответных реакций

Вы можете удалить одну или более ответных реакций из списка ответных реакций, связанных с ресурсом виджета, используя функции PtRemoveCallbacks() и PtRemoveCallback().

Не пытайтесь удалять ответные реакции, которые были добавлены через PhAB; результатом может стать непредсказуемое поведение.

Функция PtRemoveCallbacks() берёт массив записей ответных реакций как аргумент и удаляет все ответные реакции, заданные ей в списке ответных реакций. Функция PtRemoveCallback() удаляет только одну функцию ответной реакции из списка ответных реакций. Обе функции берут виджет как первый аргумент и ресурс виджета как второй аргумент.

Чтобы удалить ответную реакцию с кнопки, созданной нами выше, мы должны сделать следующее:

int push_button_cb( PtWidget_t *, void *, PtCallbackInfo_t *);

PtCallback_t callbacks[] = { {push_button_cb, NULL} };

PtRemoveCallbacks(button, Pt_CB_ACTIVATE, callbacks, 1);

или так:

int push_button_cb( PtWidget_t *, void *, PtCallbackInfo_t *);

PtRemoveCallback(button, Pt_CB_ACTIVATE, push_button_cb,

[Прим.пер. – так в тексте, без последнего параметра. Вероятно, должнен быть равен 1].

Оба – указатель на функции ответной реакции и указатель на данные клиента – важны при удалении ответных реакций. Только первый элемент списка ответных реакций, который имеет одновременно и ту же функцию ответной реакции, и тот же указатель на данные клиента, будет удалён из списка ответных реакций.

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