Окно 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);
}

Вот мой тестовый код:

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

}

2

Решение

РЕДАКТИРОВАТЬ: Причиной вашей проблемы является getch() линия. Вызвав getch (), ваша программа вернет stdscr обратно. Решение заключается в использовании wgetch() как описано в (https://stackoverflow.com/a/3808913/2372604).

Другое решение, которое я нашел, заключается в следующем, к сожалению, это может не сработать в зависимости от вашей реализации класса пользовательского интерфейса. Попробуйте следующий код с обоими 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;
}
10

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector