【发布时间】:2018-10-14 08:43:06
【问题描述】:
我有一个 ncurses 程序,有多个子窗口充当列。每个子窗口都有固定的宽度和父终端窗口的高度。
但是我发现,如果终端的宽度减小,那么其中一个窗口会失去其固定宽度,并且似乎会“溢出”其先前设置的边界,使用终端的整个剩余宽度。
这是我在上面使用的代码:
#include <ncurses.h>
int main() {
WINDOW * winA, * winB;
int i = 0, width = 30;
initscr();
// Suppress stdout
noecho();
// Enable keypad
keypad(stdscr, true);
// interrupt, quit, suspend, and flow control characters are all passed through uninterpreted
raw();
winA = newwin(0, width, 0, 0);
winB = newwin(0, width, 0, width);
timeout(50);
while(getch() != 'q') {
i = width * getmaxy(stdscr);
werase(winA);
werase(winB);
while (i--) {
waddstr(winA, "0");
waddstr(winB, "1");
}
wnoutrefresh(stdscr);
wnoutrefresh(winA);
wnoutrefresh(winB);
doupdate();
}
endwin();
return 0;
}
这是另一个屏幕截图,显示了我实际程序中的问题。左边的终端是正确的,右边的是调整窗口大小并触发此问题后的结果:
当终端调整为小宽度时,如何防止窗口失去其固定宽度?
【问题讨论】:
-
您的程序必须检查
KEY_RESIZE并使用wresize来调整您想要的窗口。