我正在学习使用curses库(pdcurses,在Windows操作系统下),并结合C++使用。
我有一个程序,可以显示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;
}