我爱上了IUP!但是,我无法弄清楚如何在IupLoad()
从 LED 文件加载的对话框中以编程方式访问(在 C 中)GUI 元素。
一种极其费力的方法是编辑 LED 文件,以便手动为每个 GUI 元素赋予句柄名称,然后在 C 中手动为每个元素定义相应的变量,然后使用IupGetHandle()
.
一种舒适的方法是使用内置的布局对话框工具将 LED 文件转换为 C 头文件。生成的代码使每个元素在一个名为 的简单数组中可供应用程序使用Ihandle* containers[]
。但是这种方式剥夺了我们使用 LED 文件的好处,例如用户编辑二进制应用程序的 GUI 和保持 C 代码小的能力。
有没有好办法呢?
如果存在的话,我是否高估了第三种方式的好处?
IupLoad()
我在C 示例目录中找不到任何示例。
下面我自己的示例明确地为顶部元素(对话框)定义了一个句柄名称。它具有一个非常简单的对话框,其中手动定义每个元素根本不会是一项艰巨的工作。但这只是 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)
)
)
这给我们带来了另一个问题:如何使俄语字符可见?但是这个问题是由于我将相应地创建一个单独的线程。