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

       

Прерывания от пользователя


Функции ввода пользователя и acedCommand (), acedCmd (), acedEntSel (), acedNEntSelP (), acedNEntSel (), acedDragGen (), и acedSSGet () функции возвращают RTCAN, если пользователь AutoCAD отвечает,  нажимая ESC. Внешняя функция должна обращаться с этим ответом как запрос отмены задания и возвращение немедленно.

ObjectARX также обеспечивает функцию, acedUsrBrk (), это явно проверяет{*отмечает*}, нажал ли пользователь ESC. Эта функция позволяет приложениям ObjectARX проверить прерывание пользователя.

Приложение не должно вызвать acedUsrBrk () если это не исполняет длинное вычисление между взаимодействиями с пользователем. Функция acedUsrBrk () никогда не должна использоваться как замена{*заместитель*} проверки значения, возвращенного функциями ввода пользователя, которые могут возвращать RTCAN.

В некоторых случаях, приложение будет хотеть игнорировать запрос отмены пользователя. Если дело обстоит так, это вызвало acedUsrBrk () чтобы очистить запрос; иначе, ESC будет все еще невыполненный{*выдающийся*} и вызовет следующий запрос ввода пользователя терпеть неудачу. (Если приложение игнорирует ESC, это должно печатать сообщение, чтобы сообщить пользователю, которого это делает так.) Всякий раз, когда ObjectARX-приложение вызвано, условие ESC автоматически очищено.

Например, следующий кодовый фрагмент терпит неудачу, если пользователь вводит ESC в подсказку.

int test()

{

int i;

while (!acedUsrBrk()) {

acedGetInt("\nInput integer:", &i); // WRONG

.

.

.



}

}

Слегка изменяемый кодовый фрагмент, который следует правильно за метками ввод ESC без того, чтобы вызвать acedUsrBrk ().

int test()

{

int i;

for (;;) {

if (acedGetInt("\nInput integer:", &i) != RTNORM)

break;

...

}

}

Следующая выборка изменяет{*заменяет*} условие цикла. Это строительство также работает правильно.

int test()

{

int i;

while (acedGetInt("\nInput integer:", &i) == RTNORM) {

...

}

}

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



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