在我的应用程序中,我有两个 WINDOW 对象,它们将终端窗口一分为二,就像一个分屏。但是当我使用 wprintw()
我在屏幕上看不到任何输出。我敢肯定,stdscr 与这两个窗口重叠。我怎样才能避免这种重叠?
也许我需要使用 wrefresh() 或 refresh()?我试过了,但没有用。
这是我的代码的简化部分。也许我做错了什么?
WINDOW *win1 = newwin(10, width, 0, 0);
WINDOW *win2 = newwin(10, width, width, 0);
wprintw(win1, "First window: ");
wprintw(win2, "Second window: ");
wrefresh(win1);
wrefresh(win2);
while((ch = getch()) != KEY_F(2)) {}
endwin();
最佳答案
stdscr
根据定义覆盖屏幕,因此它将始终与您创建的任何其他窗口重叠。如果您想拥有多个窗口,解决方案是避免使用 stdscr
。
但是您引用 stdscr
的地方可能并不明显——它在对 getch()
的调用中,也可以读作 wgetch(stdscr)
。这会执行隐式 wrefresh(stdscr)
。它用 stdscr
的(空白)内容覆盖屏幕。
您可以通过将 getch()
调用更改为 wgetch(win1)
或 wgetch(win2)
来避免此问题。在本例中,选择哪个窗口并不重要;如果要显示输入,则需要使用应显示输入的窗口。
或者,您可以在程序开始时调用 refresh()
,然后再刷新 win1
或 win2
。然后,只要您从未向 stdscr
写入任何内容,您就可以随心所欲地安全地使用 getch()
,因为隐式的 refresh()
会发现窗口中没有任何更新要显示。
关于c++ - 如何避免 ncurses 中的 stdscr 重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42420733/