Как получить доступ к элементам графического интерфейса в диалоге 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. Как получить доступ к элементам графического интерфейса в диалоге IUP, загруженном из файла светодиода? (ток)
  2. Как сделать русские буквы видимыми в диалоге IUP, загруженном из файла LED?
  3. Пробел в выпадающих списках IUP

1 ответ

Решение

Способ использовать IupGetHandle для получения доступа к некоторому элементу, а затем использовать функции IupGetChild*, GetBrother, GetParent, чтобы получить нужный элемент.

Другой вариант - использовать атрибут NAME. Вы устанавливаете его на элемент, который вы хотите, а затем используете IupGetDialogChild, чтобы получить элемент с заданным значением NAME.

Другие вопросы по тегам