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

         

Значения Списка Обработки


Значение list_box поля ввода может содержать ведущие пробелы. Если Вы отыскиваете множественные элементы, не проверите значение как строковое сравнение. Преобразуйте это к целому числу сначала, используя atoi ().

Принимая, что список принимает только единственный выбор, следующие проверки фрагмента кода был ли третий список элемент отобран. (Убедитесь, что строка пуста первая, потому что atoi () возвращается 0 для пустой строки также как для строки “0”.) следующий пример использует значение, прошел в пакете повторного вызова:

if (*cpkt->value != EOS) {

if ((atoi(cpkt->value) == 2) {

// Process the third entry.

...

}

}

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

Если список поддерживает множественный выбор, ваша программа должна делать преобразование и шаг через множественные значения в строке значения. Следующий пример требует, чтобы Вы включили файл заголовка стандартной библиотеки для C string.h.

Кроме того, Вы должны назвать mk_list () функцией со значением потока поля списка, cpkt- >value, и указателем на первоначальный список. Ради простоты, сообщения об ошибках не учтены.

resbuf

*mk_list(char *local, struct resbuf *oldlist)

{

char spaceset[] = {’ ’, ’\t’, ’\n’}, item[TILE_STR_LIMIT];

int nitem, i;



struct resbuf *findrb; *usrlist, *scratch, *usrlast;

usrlist = usrlast = NULL;

while (item = strtok(local, spaceset) != NULL) {

nitem = atoi(item);

findrb = oldlist;

for (i=0; i<nitem; i++) {

findrb=findrb->rbnext;

}

if (usrlist == NULL)  {/*AБ*/  /*  First item */

if (scratch = acutNewRb(RTSTR) == NULL)

// Assume it’s a string.

return NULL;

if ((scratch->resval.rstring = malloc(strlen(findrb->resval.rstring))) == NULL)

return NULL;

strcpy(scratch->resval.rstring, findrb->resval.rstring);

usrlist = usrlast = scratch;

} else { /* Trailing items */

if (scratch = acutNewRb(findrb->restype) == NULL)

return NULL;

if ((scratch->resval.rstring =malloc(strlen(findrb->resval.rstring))) ==NULL)

return NULL;

strcpy(scratch->resval.rstring, findrb->resval.rstring);

usrlast->rbnext = scratch;

usrlast = scratch;

}

}

return usrlist;

}

Этот пример также работает для выродившегося случая единственного выбора.



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