Пользователь не может делать интерактивный выбор, в то время как диалоговое окно активно. Если Вы хотите, чтобы пользователь делал выбор из графического экрана, Вы должны скрыть ваше диалоговое окно и затем восстанавливать это. Сокрытие поля - тот же самый как окончание этого с ads_done_dialog (), за исключением того, что ваша функция повторного вызова должна использовать ads_done_dialog () параметр состояния, чтобы указать, что диалоговое окно скрыто — в противоположность законченному или отменено. Состояние Набора к приложению - определенное значение.
Ads_start_dialog () функция возвращает определенное приложением состояние, когда диалоговое окно исчезает. Ваша программа должна тогда исследовать состояние, возвращенное ads_start_dialog () чтобы определить следующее действие.
Следующая типовая программа имеет кнопку, Выбирать Точку, которая скрывает диалоговое окно так, чтобы пользователь мог определить точку на графическом экране. Действие отбора этой кнопки заставляет диалоговое окно заканчиваться специальным состоянием 4:
ads_real x_pt, y_pt, z_pt;
ads_point pick_pt;
ads_hdlg hdlg;
int what_next;
static void CALLB
pick_callback(ads_callback_packet *cpkt)
{
ads_done_dialog(cpkt->dialog, 4);
}
void
bmake_handler()
{
// Load dialog box and do global initialization
//
while (what_next >= DLGSTATUS) {
// Indicates custom return code
// Other initialization such as ads_new_dialog(),
// ads_action_tile(), ads_set_tile(), and
// ads_start_list() calls.
//
ads_start_dialog(hdlg, &what_next);
switch (what_next) {
case 4:
acedGetPoint(NULL, "Insertion base point: ",
pick_pt);
acdbRToS(pick_pt[X], 2, 4, x_pt);
acdbRToS(pick_pt[Y], 2, 4, y_pt);
acdbRToS(pick_pt[Z], 2, 4, z_pt);
break;
...
}
}
}
Следующий пример скрывает множественные диалоговые окна:
// Глобальные переменные
//
Ads_point pick_pt;
// Они должны быть глобальная переменная, потому что subdlg_handler () функция должен
// быть способным обратиться к ним также как основной функции диалога.