Принятие параметров в функциях обратного вызова
В функции повторного вызова, значение и данные отобранного неперекрывающего расположения пропускают как параметр пакета повторного вызова, как показано на определении функции повторного вызова более раннего примера:
static void CALLB accept_OK(ads_callback_packet *cpkt)
{
// DLGOK == User pressed OK.
//
ads_done_dialog(cpkt->dialog, DLGOK);
}
CALLB символ, который появляется перед именем функции, определен как пробел.
Это - просто маркер, чтобы делать это проще для Вас, чтобы расположить функции повторного вызова, когда Вы поддерживаете вашу программу. Однако, Вы должны всегда использовать это в случае, если это определено по-другому в будущем выпуске.
Предшествующий пример просто закрывает диалоговое окно, используя только один из параметров в пакете. Тип данных пакета повторного вызова определен следующей инструкцией:
typedef struct {
ads_hdlg dialog;
ads_htile tile;
char *value;
void *client_data;
int reason;
long x, y;
} ads_callback_packet;
Параметры прошли в пакете, имеют следующие цели:
!!!! Неперекрывающее расположение ßreà tile
dialog |
Метка диалогового окна. | ||
tile |
Метка отобранного неперекрывающего расположения. Вместо принятия ключа отобранного неперекрывающего расположения, пакет PDB передает функции повторного вызова метку неперекрывающего расположения (типа ads_htile). Вы используете метку, чтобы отыскать атрибуты неперекрывающего расположения, включая его ключ, вызывая функцию ads_get_attr_string () (. Ads_get_attr_string () функция не имеет копии AutoLISP.) | ||
value |
Строка, которая содержит значение отобранного неперекрывающего расположения. Пространство для этой строки управляется в соответствии с AutoCAD; обращайтесь с этим как только для чтения. Если Вы должны изменить значение неперекрывающего расположения, используйте ads_set_tile (). Если неперекрывающее расположение - список (или всплывающий список) и никакой элемент не отобран, строка значения пуста (" "). | ||
client_data |
Указатель на специфичные для приложения данные, который был инициализирован ads_client_data_tile (). Если не имеется никаких клиентских данных, это - NULL. | ||
reason |
Причина для повторного вызова. Это зависит, на ч действии пользователь брал. Его значение установлено для любого действия, но Вы должны осмотреть это только, когда действие связано с edit_box, list_box, image_button, или неперекрывающим расположением слайдера. | ||
x, y |
Когда пользователь выбирает кнопку изображения, они установлены в (X, Y) отобранные координаты. Координаты - координаты неперекрывающего расположения в пределах диапазона, который ads_dimensions_tile () возвратился бы для кнопки изображения. |
Например, чтобы отыскать ключ отобранного неперекрывающего расположения, функция повторного вызова могла включать следующий код:
char newtile[TILE_STR_LIMIT];
ads_get_attr_string(cpkt->tile, "key", newtile, TILE_STR_LIMIT);
При поиске строкового значения, убедитесь, что разместили пространство для строки. Этот пример определяет строковую длину, используя константу TILE_STR_LIMIT.
Ads_get_attr_string () функция может отыскивать другие атрибуты со значением таким же образом, что этот пример отыскивает ключ.