关于ncurses中没有OUTPUT

时间:2012-11-05 10:03:30

标签: c ncurses

我正在使用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;

}

2 个答案:

答案 0 :(得分:0)

refresh()

之前致电sleep()
refresh();
sleep(3);

答案 1 :(得分:0)

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

  • 删除sleep(3)并在getch()修复问题后插入refresh()。现在窗口将保持不变,直到您按下一个键而不是3秒钟。
  • sleep(3)放在refresh()
  • 之后