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

时间:2017-04-17 10:23:36

标签: c iup

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

一种非常费力的方式是编辑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)
  )
)

Two animated dropdown elements in a dialog with Russian and Dutch pronouns

这给我们带来了另一个问题:我怎样才能看到俄文字符?但是这个问题是一个单独的线程,我将据此创建。

与此特定示例相关的所有问题:

  1. How do I get access to GUI elements in a IUP dialog loaded from a LED file?(当前)
  2. How can I make Russian letters visible in a IUP dialog loaded from a LED file?
  3. A gap in IUP dropdown lists

1 个答案:

答案 0 :(得分:1)

使用IupGetHandle来访问某些元素的方法然后使用IupGetChild *,GetBrother,GetParent函数来获取你想要的元素。

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