Ncurses窗口不显示任何内容

Iro*_*nny 4 c++ linux ncurses

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

这是我的功能:

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);
}
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

#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();

}
Run Code Online (Sandbox Code Playgroud)

ile*_*nt2 12

编辑:问题的原因是getch()线.通过调用getch(),您的程序将stdscr重新放回顶部.解决方案是wgetch()按照(/sf/answers/266623941/)中的描述使用.

我发现的另一个解决方案如下,遗憾的是,这可能不起作用,具体取决于您的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;
}
Run Code Online (Sandbox Code Playgroud)