纽特纽扣 我需要一个简单的基于终端的窗口/窗口小程序库,在Linux中有C或C++接口。我找到了newt,它似乎足够满足我的需要,但我只有一个问题无法解决,而google也没有太大帮助: 如何确定按下了哪个按钮?下面是一个简单的按钮示例,有两个按钮-“确定”和“取消”。如何确定按下了哪个按钮 #include <newt.h> #include <stdlib.h> void main(void) { newtComponent form, b1, b2; newtInit(); newtCls(); newtOpenWindow(10, 5, 40, 6, "Button Sample"); b1 = newtButton(10, 1, "Ok"); b2 = newtCompactButton(22, 2, "Cancel"); form = newtForm(NULL, NULL, 0); newtFormAddComponents(form, b1, b2, NULL); newtRunForm(form); newtFormDestroy(form); newtFinished(); } #包括 #包括 真空总管(真空){ 新的组件形式,b1,b2; newinit(); newtCls(); NewOpenWindow(10,5,40,6,“按钮示例”); b1=新按钮(10,1,“正常”); b2=按钮(22,2,“取消”); form=newtForm(NULL,NULL,0); newtFormAddComponents(表格b1、b2、空); 纽特伦形式(形式); 新形式破坏(形式); newtFinished(); }
更新:纽特纽扣 我需要一个简单的基于终端的窗口/窗口小程序库,在Linux中有C或C++接口。我找到了newt,它似乎足够满足我的需要,但我只有一个问题无法解决,而google也没有太大帮助: 如何确定按下了哪个按钮?下面是一个简单的按钮示例,有两个按钮-“确定”和“取消”。如何确定按下了哪个按钮 #include <newt.h> #include <stdlib.h> void main(void) { newtComponent form, b1, b2; newtInit(); newtCls(); newtOpenWindow(10, 5, 40, 6, "Button Sample"); b1 = newtButton(10, 1, "Ok"); b2 = newtCompactButton(22, 2, "Cancel"); form = newtForm(NULL, NULL, 0); newtFormAddComponents(form, b1, b2, NULL); newtRunForm(form); newtFormDestroy(form); newtFinished(); } #包括 #包括 真空总管(真空){ 新的组件形式,b1,b2; newinit(); newtCls(); NewOpenWindow(10,5,40,6,“按钮示例”); b1=新按钮(10,1,“正常”); b2=按钮(22,2,“取消”); form=newtForm(NULL,NULL,0); newtFormAddComponents(表格b1、b2、空); 纽特伦形式(形式); 新形式破坏(形式); newtFinished(); },c,linux,terminal,widget,window,C,Linux,Terminal,Widget,Window,更新: 收到反馈后,根据我的理解,我尝试添加回调函数: #include <newt.h> #include <stdlib.h> void b1Callback(newComponent co, void * data) { *((int*)data) = 4; } void main(void) { void* data; *((int*)data) = 0; newtComponent form, b1, b2; newt
收到反馈后,根据我的理解,我尝试添加回调函数:
#include <newt.h>
#include <stdlib.h>
void b1Callback(newComponent co, void * data)
{
*((int*)data) = 4;
}
void main(void) {
void* data;
*((int*)data) = 0;
newtComponent form, b1, b2;
newtInit();
newtCls();
newtOpenWindow(10, 5, 40, 6, "Button Sample");
b1 = newtButton(10, 1, "Ok");
b2 = newtCompactButton(22, 2, "Cancel");
newtComponentAddCallback(b1, b1Callback, data);
form = newtForm(NULL, NULL, 0);
newtFormAddComponents(form, b1, b2, NULL);
newtRunForm(form);
newtFormDestroy(form);
newtFinished();
}
#包括
#包括
void b1回调(新组件公司,void*数据)
{
*((int*)数据)=4;
}
真空总管(真空){
作废*数据;
*((int*)数据)=0;
新的组件形式,b1,b2;
newinit();
newtCls();
NewOpenWindow(10,5,40,6,“按钮示例”);
b1=新按钮(10,1,“正常”);
b2=按钮(22,2,“取消”);
NewComponentAddCallback(b1、b1回调、数据);
form=newtForm(NULL,NULL,0);
newtFormAddComponents(表格b1、b2、空);
纽特伦形式(形式);
新形式破坏(形式);
newtFinished();
}
您必须看一本关于回调的指南
typedef void (*newtCallback)(newtComponent, void *);
void newtComponentAddCallback(newtComponent co, newtCallback f, void * data);
void newtComponentTakesFocus(newtComponent co, int val);
回调的示例
static void b1Callback(newtComponent co, void * data)
{
// DO YOUR STUFF
}
然后添加您的代码:
newtComponentAddCallback(b1, b1Callback, NULL);
编辑:
更改回调:*((int*)数据)=4代码>
回调后,InitVal将为4
在继续之前,您必须研究指针,我想…我的解决方案是:
- 将变量设置为
newcomponent answer
- 销毁表单后调用此函数
answer=newtFormGetCurrent(表单)代码>
- 并检查答案是否为我的b1按钮
if(answer==b1)
您正在使用一个不推荐使用的函数newtRunForm()。使用newtFormRun()。newtFormRun()中的第二个参数是带有结果的结构,它返回您需要知道表单执行过程中发生了什么的所有信息。像这样使用它:
newtComponent form,b1,b2;
struct newtExitStruct exit_status;
newtFormRun(form,&exit_status);
if (exit_status.reason==NEWT_EXIT_COMPONENT) {
if (exit_status.u.co==b1) { // ok button
your code here
}
if (exit_status.u.co==b2) { // cancel button
your code here
}
}
查看.c newt.c和newt.h格式的源文件以了解常量和更多详细信息。并且newt不使用事件驱动的体系结构。非常感谢。你有关于这方面的指南的链接吗?正如你们所描述的,我试图添加一个回调函数,但它似乎根本并没有被调用。一定是大脑停了下来——不知道我在想什么,但没什么意义。当然,它应该像*((int*)data)=4无论我做什么,我都无法让它工作。如果我选择“Ok”按钮并按Enter键,我希望调用回调函数,但这永远不会发生。有人知道为什么吗?可能是数据问题。它被声明为void指针,但从未被分配到地址。然后,首先,尝试添加没有数据的回调:newComponentAddCallback(b1,b1Callback,NULL)代码>我编辑我的答案。别忘了检查最后的回答。只是尝试一下,这就像我希望它做的:)。。。并且可以轻松添加更多按钮。谢谢你的回答