我是stackoverflow.com的新手,所以我会尽力解释我的问题:)
我目前正在开发一款街机游戏"我的学校的项目,我已经使用ncurses创建了一个菜单,我可以选择使用的游戏/图形库。我已经使这个菜单可以调整大小,所以当终端缩小时,我移动窗口并调整它们的大小(类似于布局)。现在我必须合并一个文本字段来输入你的名字,我希望它也可以调整大小。
我的程序中的WINDOW里面有一个FORM里面的一个FORM,无论我做什么,窗口移动但是字段留在原地......
我做了一个测试程序,我尝试使用箭头键移动文本字段。正如预期的那样,小方块(窗口)移动但不移动。
#include <curses.h>
#include <form.h>
void move_window(WINDOW *window, int y, int x)
{
//clear();
wclear(window); // DON'T KNOW WHY IT DOESN'T CLEAR SCREEN
mvprintw(0, 0, "Y[%d] : X[%d]", y, x);
mvwin(window, y - 1, x - 1);
box(window, 0, 0);
wrefresh(window);
//refresh();
}
int main()
{
WINDOW *window;
FIELD *fields[2];
FORM *form;
int x = 20;
int y = 20;
int ch;
initscr();
keypad(stdscr, TRUE);
noecho();
cbreak();
fields[0] = new_field(1, 10, y, x, 0, 0);
fields[1] = NULL;
set_field_opts(fields[0], O_VISIBLE | O_PUBLIC | O_EDIT | O_ACTIVE | O_STATIC);
set_field_back(fields[0], A_UNDERLINE);
window = newwin(3, 12, y - 1, x - 1);
form = new_form(fields);
set_form_win(form, window);
post_form(form);
refresh();
move_window(window, y, x);
while ((ch = getch()) != 27) {
switch (ch) {
case KEY_LEFT:
x--;
move_window(window, y, x);
break;
case KEY_RIGHT:
x++;
move_window(window, y, x);
break;
case KEY_UP:
y--;
move_window(window, y, x);
break;
case KEY_DOWN:
y++;
move_window(window, y, x);
break;
case KEY_BACKSPACE:
case 127:
form_driver(form, REQ_DEL_PREV);
break;
default:
form_driver(form, ch);
break;
}
}
unpost_form(form);
free_form(form);
free_field(fields[0]);
endwin();
return 0;
}
我使用:gcc ncurse.cpp -lncurses -lform && ./a.out
你能解释一下我在这方面做错了什么吗?我自己没有找到任何解决方法:/
PS:抱歉我生锈的英语......