gpt4 book ai didi

c - ncurses 子窗口不保持固定宽度

转载 作者:太空狗 更新时间:2023-10-29 15:01:48 25 4
gpt4 key购买 nike

我有一个 ncurses 程序,多个子窗口充当列。每个子窗口都有固定的宽度和父终端窗口的高度。

但是我发现,如果终端的宽度减小,那么其中一个窗口会失去其固定宽度,并且似乎会“溢出”它们先前设置的边界,使用终端的整个剩余宽度。

这很难解释,所以我做了一个快速的 gif 来显示这个问题: pls help

这是我在上面使用的代码:

#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;
}

这是另一个屏幕截图,显示了我实际程序中的问题。左边的终端是正确的,右边的显示调整窗口大小并触发此问题后的结果:

enter image description here

当终端调整为较小宽度时,如何防止窗口失去其固定宽度?

最佳答案

与其使用 windows 来处理所有事情,不如使用 pads。 Windows 受限于屏幕大小,而 pads 则不然。

当 ncurses 收到 SIGWINCH 时,它会调整 stdscrstdscr 中包含的所有内容的大小,将那些 windows 缩小为需要适应新的屏幕尺寸,或者(如果它们的边距与旧屏幕尺寸匹配),增加它们的尺寸。那是自动的。您的程序可以检查 getch 返回的 KEY_RESIZE 并调用 wresize 来更改窗口大小(并重绘其内容)。

如果您使用了 pads,则不会调整它们的大小(pads 通过调用者可以调整的视口(viewport)显示)。

关于c - ncurses 子窗口不保持固定宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com