Как получить доступ к элементам графического интерфейса в диалоге IUP, загруженном из файла светодиода?
Я влюблен в IUP! Однако я не могу понять, как получить программный доступ (в C) к элементам GUI в диалоге, загруженном IupLoad()
из светодиодного файла.
Одним из чрезвычайно трудоемких способов было бы отредактировать файл светодиода так, чтобы вручную дать имена дескрипторов каждому отдельному элементу GUI, затем вручную определить соответствующие переменные для каждого элемента в C, а затем вручную загрузить дескрипторы в каждую переменную, используя IupGetHandle()
,
Один из удобных способов сделать это - преобразовать файл LED в файл заголовка C с помощью встроенного инструмента Layout Dialog. Полученный код делает каждый элемент доступным для приложения в простом массиве Ihandle* containers[]
, Но этот способ лишает нас преимуществ светодиодных файлов, таких как возможность редактирования пользователем GUI двоичного приложения и сохранение небольшого кода C.
Нет ли хорошего способа сделать это?
Переоцениваю ли я преимущества третьего способа, если он существовал?
Я не могу найти ни одного IupLoad()
Пример в каталоге с примерами Си.
Мой собственный пример ниже явно определяет одно имя дескриптора только для верхнего элемента (диалогового окна). Он имеет очень простой диалог, в котором определение каждого элемента вручную не будет сложной работой. Но это всего лишь пример теста для переполнения стека, и мой вопрос относится к сложным диалогам.
C файл:
#include <stdlib.h>
#include <iup.h>
int main(int argc, char **argv)
{
IupSetGlobal("UTF8MODE", "YES");
// IupSetGlobal("UTF8MODE_FILE", "YES");
IupOpen(&argc, &argv);
if(IupLoad("dropdown.led")) IupMessage("Error", "Failed to load LED.");
else {
Ihandle *dropdown = IupGetHandle("dropdown");
IupShow(dropdown);
IupMainLoop();
}
IupClose();
return EXIT_SUCCESS;
}
соответствующий dropdown.led
файл:
dropdown = DIALOG[TITLE=dropdown.led](
HBOX[CMARGIN=10x10,CGAP=10](
LIST[VALUE=3, 1=я, 2=ты, 3=оно, 4=мы, 5=вы, 6=они, DROPDOWN=YES](do_nothing),
LIST[VALUE=3, 1=ik, 2=je, 3=hij, 4=we, DROPDOWN=YES](do_nothing)
)
)
Что приводит нас к другому вопросу: как я могу сделать русские символы видимыми? Но этот вопрос должен стать отдельной веткой, которую я, соответственно, создам.
Все вопросы, которые относятся к этому конкретному примеру:
1 ответ
Способ использовать IupGetHandle для получения доступа к некоторому элементу, а затем использовать функции IupGetChild*, GetBrother, GetParent, чтобы получить нужный элемент.
Другой вариант - использовать атрибут NAME. Вы устанавливаете его на элемент, который вы хотите, а затем используете IupGetDialogChild, чтобы получить элемент с заданным значением NAME.