如何移动WINDOW内的FIELD

时间:2018-03-21 17:30:43

标签: ncurses

我是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:抱歉我生锈的英语......

0 个答案:

没有答案