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

Ресурсы image

Ресурсы образов спроектированы для хранения структуры PhImage_t. Например, виджет PtLabel имеет ресурс Pt_ARG_LABEL_IMAGE, который Вы можете использовать для хранения образа. Чтобы установить этот ресурс, создайте и инициализируйте структуру PhImage_t, затем передайте указатель на неё как третий аргумент в PtSetArg(). Четвёртый аргумент должен быть 0:

PhImage_t *my_image;

/* Создание и инициализация образа */

PtSetArg(&args[2], Pt_ARG_LABEL_IMAGE, my_image, 0);

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

Ресурсы array

При установке значения массива третьим аргументом в PtSetArg() является адрес массива. Четвёртым аргументом является число элементов массива. Например, для установки Pt_ARG_ITEMS списка выборов для виджета типа "combo box", может использоваться следующий вход в список аргументов:

char* cbox_items[3] = {"Circle", "Rectangle", "Polygon"};

PtSetArg(&args[3], Pt_ARG_ITEMS, cbox_items, 3);

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

Ресурсы flag

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

 В качестве значения используйте Pt_TRUE, Pt_FALSE или комбинацию определёных битов и их дополнений. Не используйте значения 1, поскольку это содержит просто один бит как таковой; этот бит может не соответствовать биту, который Вы пытаетесь установить.

Например, следующий список аргументов задаёт выставление флага Pt_COMBOBOX_STATIC в виджете типа combo box (так что combo box всегда отображает список пунктов):

PtSetArg(&args[4], Pt_ARG_CBOX_FLAGS, Pt_TRUE, Pt_COMBO BOX_STATIC);

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

Ресурсы function

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

PtSetArg(&args[0], Pt_ARG_RAW_DRAW_F, &my_raw_draw_fn, 0);

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

Ресурсы pointer

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

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

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

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

my_struct *user_data;

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

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

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