我正在尝试将ncurses
表单与窗口关联起来。以下是我的试用版的完整代码:
#include <form.h>
#include <vector>
#include <string>
int main() {
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
FORM *myform;
std::vector<FIELD *> fields;
fields.push_back(new_field(1, 10, 0, 0, 0, 0));
set_field_back(fields[0], A_UNDERLINE);
fields.push_back(nullptr);
myform = new_form(fields.data());
WINDOW *mypad = newpad(5, 20);
set_form_win(myform, mypad); // no effect?
post_form(myform);
prefresh(mypad, 0, 0, 10, 10, 20, 20); // no effect...
getch();
unpost_form(myform);
free_form(myform);
free_field(fields[0]);
endwin();
return 0;
}
正如评论所示,调用set_form_win
似乎没有任何效果。无论我提供给prefresh
的参数如何,表单都会显示在左上角。类似的代码使用菜单就好了,但它不适用于表单。我错过了什么?
作为一个额外的细节,即使没有拨打prefresh
或来自refresh
家庭的任何其他功能,表格也会神奇地显示。
答案 0 :(得分:1)
Windows和打击垫类似,但它们不一样。 set_form_win
函数需要一个窗口。
newpad
手册页说明:
表单库确实在内部使用pad,用于字段 - 但窗口就是那样(没有打击垫)。相关功能为wcursyncup和wsyncup(它依赖于wgetch
申请实际的wrefresh
来电。)