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 () функция должен

// быть способным обратиться к ним также как основной функции диалога.

//

ads_hdlg mdlg;

int dcl_id, what_next;

static void CALLB

hide_handler(ads_callback_packet *cpkt)

{

ads_done_dialog(cpkt->dialog, 3);

}

static void CALLB

subdlg_handler(ads_callback_packet *cpkt)

{

// REMEMBER: This function must never reference anything in

// the cpkt packet because none of its fields are valid when

// it is called explicitly in the main dialog function.

//

ads_hdlg sdlg;

ads_new_dialog("subdlg", dcl_id, NULLCB, &sdlg);

ads_action_tile(sdlg, "hide_all", hide_handler);

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

ads_start_dialog(sdlg, &what_next1);

if (what_next1 == 3) // Nested hide is in progress. */

ads_done_dialog(mdlg, DLGSTATUS); // Hide main dialog box.

}

void

maindlg_handler()

{

int what_next;

ads_callback_packet dummy_pkt;

// dummy_pkt is used when this section of code explicitly calls the

// subdlg_handler() function. The subdlg_handler() function expects

// a single parameter that is a pointer to an ads_callback_packet.

// Normally a callback function is called by AutoCAD, and AutoCAD

// provides a filled-in packet, but in this code we need to call

// the callback function explicitly in order to redisplay the

// subdialog after a hide. In order to do this we need a dummy

// ads_callback_packet. It doesn’t have to be filled in because

// none of its fields is ever used.

//

ads_load_dialog("maindlg. dcl", &dcl_id);

what_next = what_next1 = 5; // could be set to anything > 1.

while (what_next >= DLGSTATUS) { //DLGSTATUS == 2.

ads_new_dialog("maindlg", dcl_id, NULLCB, &mdlg);

ads_action_tile(mdlg, "x", subdlg_handler);

if (what_next1 == 3) {

// This is only true on returning from a nested hide.

// Since we are returning from a nested hide, restart the

// subdialog.

// Note that the main dialog has NOT been started yet.

// It is just a bit map painted on screen (it needs an

// ads_start_dialog() for interactivity).

//

subdlg_handler(&dummy_pkt);

if (what_next1 != 3) {

// OK or CANCEL pressed to exit the subdialog

// so it is time to activate the main dialog that

// was painted but not started.

//

ads_start_dialog(mdlg, &what_next);

}

} else {

// this is executed only once upon startup of this whole

// dialog code.

//

ads_start_dialog(mdlg, &what_next);

}

if (what_next == DLGSTATUS) { /* DLGSTATUS == 2 */

// This if condition is true when a nested hide is

// in progress and both dialogs are hidden.

//

ads_getpoint(NULL, "\nPick a point: ", pick_pt);

}

}

ads_unload_dialog(dcl_id);

}

Определения и Объявления

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

#include "Adsdlg. h"

В добавлении, чтобы функционировать объявления, adsdlg. h определяют множество символов и типов, чтобы использовать с функциями диалогового окна, описанными в ObjectARX Ссылке.

Метки для Диалоговых окон и Неперекрывающих расположений

Adsdlg. h файл определяет два типа метки:

§  ads_hdlg идентифицирует диалоговые окна. Ads_new_dialog () функция назначает новое диалоговое окно, метка ads_hdlg для идентификации диалогового окна в наиболее последующий вызывает к функциям PDB, пока ads_done_dialog () не вызван.

§  ads_htile идентифицирует отобранное неперекрывающее расположение в пределах функций повторного вызова.

Если ads_new_dialog () сбои, это устанавливает метку в NULL или BAD_DIALOG.

Определения Функции Повторного вызова

Чтобы регистрировать функции повторного вызова с ads_action_tile () и ads_new_dialog (), adsdlg. h определяет тип CLIENTFUNC, который указывает на функцию повторного вызова как показано в следующей примере:

typedef void (*CLIENTFUNC)(ads_callback_packet *cpkt);

(Пустой) символ CALLB определен, чтобы делать функции повторного вызова проще, чтобы расположить в исходном тексте, как в следующем примере:

static void CALLB

dbox_handler(ads_callback_packet *cpkt)

Вы можете использовать ads_new_dialog () функция также, чтобы определить заданную по умолчанию функцию повторного вызова для диалогового окна. Если Вы не используете эту особенность, передаете нулевой{*пустой*} указатель функции NULLCB, который определен следующим образом:

#define NULLCB ((CLIENTFUNC) 0)

Коды Состояния

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

Значения кода Состояния

Символ

Описание

DLGOK

Пользователь выбрал кнопку OK или ее эквивалент.

DLGCANCEL

Пользователь выбрал Отмену или ее эквивалент.

DLGALLDONE

Диалоговое окно неактивно; ads_term_dialog был вызван.

DLGSTATUS

Если состояние большее чем или равно DLGSTATUS, это - определенный приложением код состояния.

Код причины прошел в пакете повторного вызова (cpkt->reason) - целое число, которое указывает, почему повторный вызов произошел (то есть какое действие пользователя генерировало повторный вызов). Коды причины повторного вызова показываются в следующей таблице:

Причина Повторного вызова закодирует значения

Символ

Описание

CBR_SELECT

Пользователь выбрал неперекрывающее расположение (поле ввода).

CBR_LOST_FOCUS

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

CBR_DRAG

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

CBR_DOUBLE_CLICK

Списки или кнопки изображения, пользователь дважды нажали, чтобы делать заключительный выбор.

Символы, описанные в этом разделе используются с ads_mode_tile () и ads_start_list () функции.

Функция ads_start_list () начинает обрабатывать список для списка или всплывающего списка. Символы, чтобы использовать показываются в следующей таблице:

Функция Списка закодирует значения

Символ

Описание

LIST_CHANGE

Изменение отобранного содержания списка.

LIST_APPEND

Добавляют новый вход списка.

LIST_NEW

Удаляют старый список и создают новый список.

Функция ads_mode_tile () управляет фокусом поля ввода и определяет, позволяется ли это. Символы и их описания показываются в следующей таблице.

Режим поля ввода кодируется значениями

Символ

Описание

MODE_ENABLE

Позволяют поле ввода

MODE_DISABLE

Отключают поле ввода

MODE_SETFOCUS

Набор сосредотачивается к полю ввода

MODE_SETSEL

Выбор содержания окна редактирования

MODE_FLIP

Зеркальное изображение, высвечивающее вкл. или выкл.

Имена атрибута и значения пропускают как строки; ваши программы должны разместить пространство для их. Верхний предел на строках, используемых с диалоговыми окнами определен в TILE_STR_LIMIT как 255 плюс один для нулевого признака конца, EOS).

Обработка полей ввода

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

Режимы Инициализации и Значения

Инициализация поля ввода включает создание это начальный фокус клавиатуры диалогового окна, отключения или предоставления возможности это, или (если это - окно редактирования или изображение) высвечивание его содержания. Эти операции выполнены ads_mode_tile () вызывает. Вы можете также устанавливать значение поля ввода с ads_set_tile ().

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

strcpy(name_str, "Nugent"); // Default name.

ads_set_tile(hdlg, "lastname", name_str);

ads_mode_tile(hdlg, "lastname", MODE_SETFOCUS);

Следующая инструкция вызывает ads_mode_tile () снова, чтобы высветить содержание окна редактирования так, чтобы пользователь мог немедленно печатать поверх заданного по умолчанию содержания:

Из за большого объема этот материал размещен на нескольких страницах:
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