ObjectARX, AutoCAD. Среда программирования библиотеки C++

       

Введение Списков и Всплывающих Списков


Вы основываете списки, отображенные в списках, и во всплывающих списках,  используя последовательность вызывает к трем функциям: ads_start_list (), ads_add_list (), и ads_end_list (). Как только список был создан, Вы можете исправлять это. Имеются три возможных операции, которые определены ads_start_list () параметр операции функции (чей значения показываются в круглых скобках в следующем списке).

§

Создают новый список (LIST_NEW).

После ads_start_list () запрос, Вы можете вызывать ads_add_list () неоднократно.

Каждый ads_add_list () запрос прибавляет новый элемент к списку. Конечная обработка списка,  вызывая ads_end_list ().

§         Изменяют элемент в списке (LIST_CHANGE).

После ads_start_list (), вызовите ads_add_list () однажды заменить элемент, чей индекс был определен в ads_start_list () запрос. ( Если Вы называете ads_add_list () больше чем однажды, это заменяет тот же самый элемент снова.) В конце обработки  вызывают ads_end_list ().

§         Добавляют элемент к списку (LIST_APPEND).

После ads_start_list (), вызовите ads_add_list () чтобы добавить элемент к концу списка. Если Вы продолжаете вызывать ads_add_list (), большее количество элементов добавлено в конец, пока Вы не вызываете ads_end_list ().

Независимо от которой списка операции Вы делаете, Вы должны вызвать три функции в правильной последовательности: ads_start_list(), тогда ads_add_list() (возможно больше чем однажды) и ads_end_list().

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

struct resbuf *appnames, *rb;

// Initialize the appnames list here.



//

...

rb = appnames;

ads_start_list(hdlg, "selections", LIST_NEW, 0);

while (rb != NULL) {

ads_add_list(rb->resval.rstring);

rb = rb->rbnext;

}

ads_end_list();

Для коротких списков, проще передать индивидуальные строки. Список буфера результата не требован.

Значение list_box поля ввода - индекс (или индексы) отобранного элемента (или элементы). Если ваша программа должна знать фактический текст, связанный с индексом, это должно сохранить первоначальный список. Это должно также проследить изменения, сделанные методами, показанными в следующих примерах.


Элементы списка Добавления в конец подобны созданию нового списка. Например, appnames имеет 12 элементов в этом, и Вы хотите добавить другой список, вызвал newnames:
(start_list "selections" 2)
(mapcar ’add_list newnames)
(end_list)
В ObjectARX, Вы должны определить индексное значение, но ads_add_list () игнорирует это в добавляющейся операции.
struct resbuf *appnames, *newnames, *rb;
rb = newnames;
ads_start_list(hdlg, "selections", LIST_APPEND, 0);
while (rb != NULL) {
ads_add_list(rb->resval.rstring);
rb = rb->rbnext;
}
ads_end_list();
Изменение единственного элемента требует только одного ads_add_list () запрос. В следующем примере, Вы определяете индекс элемента, чтобы измениться:
ads_start_list(hdlg, "selections", LIST_CHANGE, 5);
ads_add_list("SURPRISE!");
ads_end_list();
Вы не можете удалять элемент списка или вставлять элемент без того, чтобы восстановить полный список.

Содержание раздела