C ++を使用して、cursesライブラリ(Windows OSの場合はpdcurses)を学習しようとしています。3 つのウィンドウを表示するプログラムがあり、その後、getch() によってキャプチャされたキーの押下に基づいて処理を行う while ループがあります。F1 キーを押すと、ループが終了します。
ただし、3 つのウィンドウすべてを 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;
}