logo
Литература_1 / photon_old

Инициализация перетаскивания

Где Вы инициализируете перетаскивание, зависит от того, как пользователь собирается перетаскивать виджеты. Например, если пользователь удерживает нажатой левую кнопку мыши на виджете, чтобы его перетащить, перетаскивание инициализируется в ответной реакции Arm (Pt_CB_ARM) или Outbound (Pt_CB_OUTBOUND) виджета. Убедитесь, что в ресурсе Pt_ARG_FLAGS виджета установлен флаг Pt_SELECTABLE.

Перетаскивание начинается с вызова функции PhInitDrag():

int PhInitDrag(PhRid_t rid,

unsigned flags,

PhRect_t *rect,

PhRect_t *boundary,

unsigned int input_group,

PhDim_t *min,

PhDim_t *max,

const PhDim_t *step,

const PhPoint_t *ptrpos,

const PhCursorDescription_t *cursor );

где используемые аргументы:

rid

Идентификатор региона, с которым связаны rect и boundary. Вы можете получить его, вызвав функцию PtWidgetRid().

flags

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

rect

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

boundary

Прямоугольная область, ограничивающая перетаскивание .

input_group

Получить это можно из события в параметре cbinfo ответной реакции, вызвав функцию PhInputGroup().

min, max

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

step

Ступенчатость перетаскивания.

ptrpos

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

cursor

Если не NULL, определяет, как курсор должен выглядеть при перетаскивании.

Если во flags включён Ph_DRAG_TRACK, используется непрозрачное перетаскивание; если ph_DRAG_TRACK не включён – контурное. Следующие флаги указывают, какой край (края) перетаскиваемого прямоугольника оставляет след:

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4