Подтвердить что ты не робот

С++-оболочки для ncurses?

Может ли кто-нибудь порекомендовать С++-оболочку для ncurses?

4b9b3361

Ответ 1

ncurses включает в себя набор привязок С++. Я не знаю, содержат ли какие-либо из основных дистрибутивов привязки С++, но если вы получите источник ncurses, вы найдете их в каталоге С++.

Я не знаю, буду ли я обязательно рекомендовать их, но они, вероятно, являются лучшими связями на С++ и включают привязки для расширений форм, панели и меню. Они немного грубые вокруг краев, и документации не так много.

Ответ 2

Попробуйте этот проект для создания кукурузы. Это комплект разработки NCurses для С++

http://ndk-xx.sourceforge.net/

Ответ 3

Я написал свои собственные несколько лет назад... Я сделал это, потому что в Linux была установлена ​​совместимая с ncurses библиотека, но не под Win32. (Я мог бы использовать PDCurses, но в то время я не мог помешать PDC_breakout() остановить операцию refresh(), не открывая исходный код.)

Эта обертка была написана в течение 7 дней, как часть быстрого развития. Таким образом, он имеет несколько (съемных) зависимостей от типов ввода/вывода, специфичных для программы, но их можно безопасно удалить.

В принципе, у меня есть две основные функции - инициализация, которая вызывает все функции инициализации проклятий и определения цветов, которые я не планирую позже настраивать, и функцию обновления, которая передает "внутренний" буфер отображения на выход.

В целом вы можете чувствовать себя более комфортно, создавая в индексной карточке или чит-лист, содержащий " initscr(); cbreak(); noecho(); move (y, x); addch (ch); endwin();", но если вы хотите использовать мою обертку, вы можете отправить мне сообщение или загрузить его из здесь, пока вы соблюдаете лицензия Creative Commons.

Ответ 4

Пару лет назад, когда мне это было нужно, я просмотрел несколько файлов проклятий, которые предоставляют проклятия С++ thingies. Хотя они "отлично работали", я был разочарован - этот новый код вводит еще больше "проклятых-макросов". Я не признал никаких попыток отключить макросы (нет пространства имен, всего несколько классов). Полагаю, это была не их цель.

В конце концов я решил, что эти макросы также натолкнулись на слишком много полезных символов, как это делают только макросы. Я закончил рефакторинг моего кода, чтобы свести к минимуму воздействие этих макросов.

По сути, я переместил несколько моих приложений, которые отображают вещи в 2 новых файла. Этот рефакторинг также создал несколько небольших новых методов, которые были добавлены в 2 новых файла "отображения". (11 файлов расширены до 13)

Как я уже сказал, они работают нормально, мой код не был затронут изменением, комментарии в cursesw.h предполагают, что он меняет макросы на строки, и я нахожу там некоторые классы.

cursesf.h имеет классы, используемые в другом месте, как и cursesm.h(для меню), и cursesw.h(для окон), curseslk.h(для набора мягких меток), все, что я еще не использовал.

Мне не понравилось cursesapp.h - возможно, это вещь Windows?


Могу ли я порекомендовать это? Ну, я предпочитаю этот код предыдущим проклятиям, хотя я реорганизую, чтобы сохранить макросы.

Ответ 5

Возможно, сверните свои собственные С++-обертки?

... Я создал несколько С++-оболочек для некоторых ncurses и функций и объектов CDK.

Тем не менее, я создавал только оболочки для функций и структур в качестве необходимой поддержки для своего небольшого проекта, который использует CDK и ncurses для своего графического интерфейса. Но они могут дать вам идеи для создания собственных С++-обложек вызовов CDK и ncurses, которые вам нужны.

В основном я использовал их, чтобы избежать утечек памяти, поскольку деструкторы С++ удаляют любые динамически созданные строки char * или используют std::string вместо строк char* и т.д.

Вот очень скромный пример:

class RXL_ncurses {

 public:
  static void draw(WINDOW * pWin, int y, int x, std::string lineOfText);
};

void RXL_ncurses::draw(WINDOW * pWin, int y, int x, std::string lineOfText) {
  //
  // Draw a std::string into the WINDOW*, starting at y,x
  //
  chtype letter;
  unsigned int i;
  unsigned int xPos;
  unsigned int yPos;

  for(i = 0; i < lineOfText.size(); i++) {
    letter = (chtype) lineOfText[i];

    xPos = i + x;
    yPos = y;
    mvwaddch(pWin, yPos, xPos, letter);
  }
}

http://mrflash818.geophile.net/software/nc_834v5010generator/