在我的应用程序中,我有两个 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();
答案 0 :(得分:3)
stdscr
涵盖了屏幕,因此它将始终与您创建的任何其他窗口重叠。如果您想拥有多个窗口,解决方案是避免使用stdscr
。
但您引用stdscr
的位置可能并不明显 - 它位于getch()
的调用中,也可以读作wgetch(stdscr)
。这是一个隐含的wrefresh(stdscr)
。用stdscr
的(空白)内容覆盖屏幕。
您可以通过将getch()
来电更改为wgetch(win1)
或wgetch(win2)
来避免此问题。在这个例子中,你选择哪个窗口并不重要;如果您正在显示输入,则需要使用应显示输入的窗口。
或者,您可以在程序开始时直接致电refresh()
,然后再刷新win1
或win2
。然后,只要你从未向stdscr
写过任何内容,就可以安全地使用getch()
,因为隐式refresh()
会在窗口中找不到任何更新来显示。< / p>
答案 1 :(得分:0)
对不起家伙浪费你的时间!我自己找到了答案! 这是代码:
WINDOW *win1, *win2;
int maxx, maxy, halfx;
getmaxyx(stdscr, maxy, maxx);
halfx = maxx >> 1;
win1 = newwin(maxy, halfx, 0, 0);
wgetch(win1, "First window");
wrefresh(win1);
win2 = newwin(maxy, halfx, 0, halfx);
wgetch(win2, "Second window");
wrefresh(win2);