0

我正在使用 ncurses 在主窗口中准备一个简单的菜单,该菜单有 5 个选项,并在箭头键的帮助下选择它们。目前我准备了一个程序,只在屏幕上显示一个只有 5 个选项的菜单,但有些如何输出显示为空白屏幕。请帮助我找出代码中的错误。

#include<ncurses.h>
#include<stdlib.h>
//#define ENTER 10
//#define ESCAPE 27

void init_curses()
{initscr();
start_color();
init_pair(1,COLOR_WHITE,COLOR_BLUE);
init_pair(2,COLOR_BLUE,COLOR_WHITE);
init_pair(3,COLOR_RED,COLOR_WHITE);
curs_set(0);
noecho();
keypad(stdscr,TRUE);
}

void draw_mainmenu(WINDOW *mainmenu)
{ wbkgd(mainmenu,COLOR_PAIR(2));
  waddstr(mainmenu, "HELLO THIVNENT");
  move(1,0);
  waddstr(mainmenu, "HELLO THIVNENT 1");
move( 2,0);
  waddstr(mainmenu, "HELLO THIVNENT 2");
move( 3,0);
  waddstr(mainmenu, "HELLO THIVNENT 3");
move( 4,0);
  waddstr(mainmenu, "HELLO THIVNENT 4");
move( 5,0);
  waddstr(mainmenu, "HELLO THIVNENT 5");
wattroff(mainmenu,COLOR_PAIR(3));
}


int main()
{
  int key;
  WINDOW *mainmenu;
  init_curses();
  bkgd(COLOR_PAIR(1));
  mainmenu=subwin(stdscr,1,80,0,0);
  draw_mainmenu(mainmenu);
sleep(3);
refresh();

delwin(mainmenu);
endwin();
return 0;

}
4

2 回答 2

0

refresh()之前打电话sleep()

refresh();
sleep(3);
于 2012-11-05T10:19:30.600 回答
0

您的代码完全正确。问题是该sleep(3)功能被放置在refresh()3 秒后导致刷新之前,并且您立即尝试删除该窗口,当然您将无法看到它。有两种方法可以解决这个问题。

  • 修复问题后删除sleep(3)并插入一个。该窗口现在将一直停留,直到您按下一个键 3 秒钟。getch()refresh()
  • 放置sleep(3)refresh()
于 2012-11-05T10:20:20.350 回答