如何在NCurses中添加窗口边距?

4
我有我的窗户。
WINDOW *win = newwin(40, 40, 3, 3);

当输入的文本跨越多行时,如何保留窗口内边框周围整齐的空白?在NCurses中似乎找不到赋予窗口这种属性的方法。

我猜创建另一个窗口来实现填充可能是一种方法。但应该有更简洁的方式。


不,那肯定是最干净的方式。 - William McBrine
@WilliamMcBrine 你确定吗?没有内置的函数或技术可以做到这一点吗?我的意思是,它在专业应用中使用吗? - Rasteril
1个回答

1

William McBrine非常确定。保留窗口周围的框最简单的方法是在包围它的窗口中创建框。这是因为:

  • 内部框的更改对框没有影响
  • 有一个函数box,可以沿给定窗口的边缘绘制框。

ncurses的几个测试程序都使用了这个功能。例如,主测试程序(在ncurses.c中)的一个菜单条目通过创建一个窗口来容纳框,然后创建一个窗口来容纳其内容,在新的内部框中继续接受输入之前,在前者中绘制框。

    } else if (c == 'w') {
        int high = getmaxy(win) - 1 - first_y + 1;
        int wide = getmaxx(win) - first_x;
        int old_y, old_x;
        int new_y = first_y + getbegy(win);
        int new_x = first_x + getbegx(win);

        getyx(win, old_y, old_x);
        if (high > 2 && wide > 2) {
            WINDOW *wb = newwin(high, wide, new_y, new_x);
            WINDOW *wi = newwin(high - 2, wide - 2, new_y + 1, new_x + 1);

            box(wb, 0, 0);
            wrefresh(wb);
            wmove(wi, 0, 0);
            remember_boxes(level, wi, wb);
            wgetch_test(level + 1, wi, delay);
            delwin(wi);
            delwin(wb);

            wgetch_help(win, flags);
            wmove(win, old_y, old_x);
            touchwin(win);
            wrefresh(win);
            doupdate();
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接