我正在尝试使用 C++ 学习 curses 库(pdcurses,因为我在 Windows 操作系统中)。我有一个显示 3 个窗口的程序,然后是一个 while 循环,根据 getch() 捕获的按键进行一些处理。按下 F1 键时退出循环。
然而,尽管使用 wrefresh() 刷新了所有三个窗口,但在我输入第一次按键之前什么都没有出现。没有while循环,一切都显示得很好。我做了很多测试,就像第一次调用 getch() 会完全清除屏幕,但不是后续的。
我的问题是:我错过了什么?起初,我在想也许 getch() 正在调用一个隐式 refresh(),但是为什么随后对它的调用没有相同的行为呢?
非常感谢您的帮助。
这是代码。
#include <curses.h>
int main()
{
initscr();
raw();
keypad(stdscr, TRUE);
noecho();
curs_set(0);
WINDOW *wmap, *wlog, *wlegend;
int pressed_key;
int map_cursor_y = 10, map_cursor_x = 32;
wlog = newwin(5, 65, 0, 15);
wlegend = newwin(25, 15, 0, 0);
wmap = newwin(20, 65, 5, 15);
box(wmap, 0 , 0);
box(wlog, 0 , 0);
box(wlegend, 0 , 0);
mvwprintw(wlog, 1, 1, "this is the log window");
mvwprintw(wlegend, 1, 1, "legends");
mvwaddch(wmap, map_cursor_y, map_cursor_x, '@');
wrefresh(wlog);
wrefresh(wmap);
wrefresh(wlegend);
while ((pressed_key = getch()) != KEY_F(1))
{
/* process keys to move the @ cursor (left out because irrelevant) */
box(wmap, 0 , 0);
box(wlog, 0 , 0);
box(wlegend, 0 , 0);
wrefresh(wmap);
wrefresh(wlog);
wrefresh(wlegend);
}
endwin();
return 0;
}