Ncurses窗口不显示任何东西

我正在使用ncurses库来编写一个控制台应用程序。 我有一个函数是假设写入窗口缓冲区,然后刷新窗口。 在我的testing函数中,我调用窗口函数,并发生了一些事情,因为程序移动到下一行(getch(),它只是等待我的一个字符),但没有显示任何内容。

这是我的function:

void UI::drawAudience(int audience1, int audience2) { string bar1 = "", bar2 = ""; for (int i; i < BAR_SIZE; i++) { bar1 += (i <= audience1) ? ' ' : '+'; if (i <= audience2) bar2 += '+'; } string audienceName = "Audience Name"; //mvwprintw(audience, 0, 11 - audienceName.size() / 2, "%s", audienceName.c_str()); //mvwprintw(audience, 1, 0, "%s|%s", bar1.c_str(), bar2.c_str()); wprintw(audience, "Test"); wrefresh(audience); } 

这是我的testing代码:

 #include "Tests.h" #include <string> using namespace std; void test() { int y = 1; UI testUI; initscr(); cbreak(); WINDOW* windowTest = newwin(1, 23, 3, 0); wprintw(windowTest, "This is a new window"); wrefresh(windowTest); getch(); clear(); delwin(windowTest); testUI.drawAudience(4,5); getch(); endwin(); } 

编辑:你问题的原因是getch()行。 通过调用getch(),你的程序将stdscr放回顶部。 解决方案是使用( https://stackoverflow.com/a/3808913/2372604 )中所述的wgetch() )。

我发现的另一个解决方案是以下,不幸的是这可能无法正常工作取决于您的UI类的实现。 尝试下面的代码,同时注释掉两个refresh()行,然后尝试再次运行(或两个)行注释。 如果在刷新窗口之前不刷新屏幕,则永远不会看到窗口。

 #include <ncurses.h> int main(int argc, char** argv) { initscr(); cbreak(); refresh(); // Important to refresh screen before refresh window WINDOW* windowTest = newwin(1, 23, 3, 0); wprintw(windowTest, "Hello World"); //refresh(); // Refresh here works as well wrefresh(windowTest); getch(); delwin(windowTest); endwin(); return 0; }