无法将 ncurses 表单与 window 相关联
Unable to associate an ncurses form with a window
我正在尝试将 ncurses
表单与 window 关联。这是我试用的完整代码:
#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
家族的任何其他函数,表单也会神奇地显示出来。
Windows和pads很像,但又不一样。 set_form_win
函数需要 window.
newpad
手册页注释:
It is not legal to call wrefresh
with a pad as an argument; the routines prefresh or
pnoutrefresh should be called instead.
表单库确实使用了便笺簿——在内部,用于 字段 ——但 windows 就是这样(没有便笺簿)。相关函数是wcursyncup and wsyncup (it relies on wgetch
for the application for the actual wrefresh
调用)。
我正在尝试将 ncurses
表单与 window 关联。这是我试用的完整代码:
#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
家族的任何其他函数,表单也会神奇地显示出来。
Windows和pads很像,但又不一样。 set_form_win
函数需要 window.
newpad
手册页注释:
It is not legal to call wrefresh with a pad as an argument; the routines prefresh or pnoutrefresh should be called instead.
表单库确实使用了便笺簿——在内部,用于 字段 ——但 windows 就是这样(没有便笺簿)。相关函数是wcursyncup and wsyncup (it relies on wgetch
for the application for the actual wrefresh
调用)。