如何访问从 LED 文件加载的 IUP 对话框中的 GUI 元素?

How do I get access to GUI elements in a IUP dialog loaded from a LED file?

我爱上了 IUP!但是,我无法弄清楚如何在由 IupLoad() 从 LED 文件加载的对话框中以编程方式访问(在 C 中)GUI 元素。

一种非常费力的方法是编辑 LED 文件,以便手动为每个 GUI 元素指定句柄名称, 然后手动为C中的每个元素定义相应的变量,然后使用IupGetHandle().

手动将句柄加载到每个变量中

一种舒适的方法是使用内置布局对话框将 LED 文件转换为 C 头文件工具。生成的代码使每个元素在一个名为 Ihandle* containers[] 的简单数组中可供应用程序使用。但是这种方式剥夺了我们使用 LED 文件的好处,例如用户可以编辑二进制应用程序的 GUI 并保持 C 代码小。

没有好的方法吗?

如果存在第三种方式,我是否高估了它的好处?

我在 the directory with C examples 中找不到任何 IupLoad() 示例。

下面我自己的例子明确地为顶部元素(对话框)定义了一个句柄名称。它有一个非常简单的对话框,手动定义每个元素根本不是一件难事。但这只是 Stack Overflow 的测试示例,我的问题与复杂对话框有关。

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. (当前)

方法 os 使用 IupGetHandle 获取对某些元素的访问权,然后使用 IupGetChild*、GetBrother、GetParent 函数获取您想要的元素。

另一种选择是使用 NAME 属性。您将它设置在您想要的元素上,然后使用 IupGetDialogChild 检索给定 NAME 值的元素。