Когда диалоговое окно включает несколько неперекрывающих расположений, чей обработка подобна, может быть удобно связать эти неперекрывающие расположения с отдельной функцией повторного вызова. Принцип не совершения на изменения пользователя до пользователя определяет, OK все еще применяется. Функция повторного вызова, обычная к нескольким неперекрывающим расположениям может быть с формированием изображений при помощи таблицы, используя определяемые пользователем атрибуты, чтобы обеспечить значения определенными к каждому неперекрывающему расположению.

Заданные по умолчанию действия

Имеется другой способ определить действия в дополнение к запросу ads_action_tile (). Вы можете определять заданное по умолчанию действие для полного диалогового окна, когда Вы вызываете ads_new_dialog (). Неперекрывающее расположение может иметь только единственное действие во времени. Если приложение определяет больше чем одно действие, они заменяют друг друга в следующем порядке очередности:

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

2 действие, назначенное последним ads_action_tile () запрос. Когда неперекрывающее расположение названо в больше чем одним ads_action_tile () запросом, только последним, такой запрос (до ads_start_dialog ()) имеет любой эффект (это подобно назначению множественных значений к той же самой переменной). PDB средство позволяет только одно действие в неперекрывающее расположение.

НЕ нашли? Не то? Что вы ищете?

Принятие параметров в функциях обратного вызова

В функции повторного вызова, значение и данные отобранного неперекрывающего расположения пропускают как параметр пакета повторного вызова, как показано на определении функции повторного вызова более раннего примера:

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 () функция может отыскивать другие атрибуты со значением таким же образом, что этот пример отыскивает ключ.

Причины Повторного вызова

Причина повторного вызова, возвращенная как поле причины пакета повторного вызова, определяет, почему действие или повторный вызов произошли. Его значение установлено для любого вида действия, но Вы должны осмотреть это только, когда действие связано с edit_box, list_box, image_button, или неперекрывающим расположением слайдера. Следующая таблица показывает возможные значения.

Значения причины Повторного вызова

Код

Символ

Описание

1

CBR_SELECT

Пользователь выбрал неперекрывающее расположение. Это - значение для большинства неперекрывающих расположений действия.

2

CBR_LOST_FOCUS

Окна редактирования For, пользователь передвигались в другое неперекрывающее расположение, но не делали заключительный выбор. Если это - причина для повторного вызова окна редактирования, ваше приложение не должно модифицировать значение связанной переменной, но должно проверить законность значения в окне редактирования.

3

CBR_DRAG

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

4

CBR_DOUBLE_CLICK

Эта причина повторного вызова всегда следует за CBR_SELECT. Это обычно означает “ передают предыдущему выбору.” Это не должно отменить предыдущий выбор; это может смущать и раздражать пользователя. Для списков или кнопок изображения, пользователь дважды нажал, чтобы делать заключительный выбор. Для кнопок изображения, пользователь дважды нажал на кнопке изображения.

Значение двойного щелчка на списке или кнопке изображения - до вашего приложения. Если основная цель диалогового окна состоит в том, чтобы выбрать элемент списка, двойной щелчок должен делать выбор и затем выходить из диалогового окна (в этом случае, атрибут is_default list_box неперекрывающего расположения должен быть истинен). Если список - не первичное неперекрывающее расположение в диалоговом окне, то с двойным щелчком нужно обращаться с тем же самый как создание выбора (1, или CBR_SELECT). Списки, которые позволяют пользователю выбирать множественные элементы (multiple_select = истина;) не может поддерживать двойное нажатие.

Если основная цель диалогового окна состоит в том, чтобы выбрать кнопку изображения, одиночный щелчок должен выбрать кнопку, но иногда это лучше для одиночного щелчка (или перемещение клавиатуры) чтобы высветить кнопку и ENTER или двойной щелчок, чтобы выбрать это.

Пример обработки кнопки изображения одиночного щелчка - диалоговое окно AutoCAD Choose Hatch Pattern (вызванный от команды BHATCH). Пример кнопок изображения двойного щелчка - диалоговое окно AutoCAD Select Text Font (вызванный от опции Set Style на Текстовом подменю по умолчаниюа, рисуют опускающееся меню), который показывает список с текстовыми названиями стиля и кнопками изображения с эквивалентными текстовыми значками стиля. В этом диалоговом окне, одиночный щелчок или на кнопке изображения или элементе списка высвечивает, и текстовое имя стиля и значок, и двойной щелчок на любом делает выбор.

Вложение Диалоговых окон

Вы создаете и управляете вложенными диалоговыми окнами просто, вызывая ads_new_dialog () и ads_start_dialog () изнутри функции повторного вызова.

Пользователь должен выйти из вложенного диалогового окна перед использованием предыдущего диалогового окна снова.

AutoCAD налагает предел не больше, чем восемь вложенных диалоговых окон, но Вы не должны вложить диалоговые окна глубже чем три или четыре.

Хотя ads_term_dialog () заканчивает все диалоговые окна сразу, это не возвращает код состояния, так не имеется никакого пути для вашего приложения, чтобы различить между сокрытием вложенного поля и отмены полей из-за условия ошибки.

Сокрытие Диалоговых окон

Пользователь не может делать интерактивный выбор, в то время как диалоговое окно активно. Если Вы хотите, чтобы пользователь делал выбор из графического экрана, Вы должны скрыть ваше диалоговое окно и затем восстанавливать это. Сокрытие поля - тот же самый как окончание этого с ads_done_dialog (), за исключением того, что ваша функция повторного вызова должна использовать ads_done_dialog () параметр состояния, чтобы указать, что диалоговое окно скрыто — в противоположность законченному или отменено. Состояние Набора к приложению - определенное значение.

Ads_start_dialog () функция возвращает определенное приложением состояние, когда диалоговое окно исчезает. Ваша программа должна тогда исследовать состояние, возвращенное ads_start_dialog () чтобы определить следующее действие.

Следующая типовая программа имеет кнопку, Выбирать Точку, которая скрывает диалоговое окно так, чтобы пользователь мог определить точку на графическом экране. Действие отбора этой кнопки заставляет диалоговое окно заканчиваться специальным состоянием 4:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132