Програмиране с ncurses първи стъпки

Понякога трябва да се напише някоя програма, без да се прибягва до непохватни библиотеки графични инструментариуми като Qt или GTK и разполага с обичайната изхода на конзолата (ФОРМАТ, Cout) все още не е достатъчно. Какво да се прави? Помощ идва ncurses.

Ncurses свързват към вашата програма в C или C ++ е много проста. Достатъчно, за да се използва в директивата за източник #include , и за съставяне уточни -lncurses на връзка:

Разбира се, че е необходимо да имате инсталирани ncurses заглавни файлове. В Debian и Ubuntu пакет с тях, наречен ncurses-Dev:

За изграждането на програмата, където повече от един файл, той е удобен за използване някаква autotools изгради система или Scons. В случая на последната (аз го предпочитам), в източник директория на програмата, която трябва да създадете файл, наречен SConstruct следното съдържание:

Сега, когато ви свършат същата команда scons каталог ще бъдат класирани по всички .cpp файлове и свързани с библиотеката на ncurses, както и всяка друга (в примера - «други-LIBS»). За да се изгради и инсталирате програмата, е необходимо да се извърши като корен:

Излезте от библиотеката ncurses да оспори функция endwin (), която освобождава всички използвани ресурси на библиотеката и да се върне на терминала към държавата преди инициализация на софтуера си библиотека.

За да прочетете клавиши се използва за обща цел getch () функция, както и за четене на даден прозорец - wgetch (). Цикълът изглежда по следния начин:

В този пример ние считаме всички три вида ключов определяне се притискат: директно върху символа, както и от кодовото име константи. Ако функцията noecho () е забранена, клавиши ще бъдат показани на екрана, в противен случай - няма да.

За текст изход на конзолата е най-често се използва printw (функция), което отнема същите аргументи като ФОРМАТ (), така че можете да форматирате текста, колкото искате. За C ++ редове (STD: низ) като низ параметри, необходими за тях преминават през c_str () функция, която е:

В начина на определяне на низ без следящ «\ н» характер на курсора остава на втора линия, последният показва знаци, така че следващата покана printw () в този случай ще допълни текущия ред. функция addch () се използва за показване символ се предава в параметъра. Веднага можем да го попитам белег на атрибути (символ се комбинира с атрибути, като се използва логическо ИЛИ):

Печат на символа на дадените координати, можете да:

Текст атрибути - цвета и стила. Те са от значение за printw (). Как мога да променя атрибутите?

Първо трябва да включите "цвят на двигателя» ncurses, причинявайки (обикновено след initscr) () функция:

Вътре той създава палитра от 8 основни цвята (COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE), както и инициализират глобални променливи, цветове и COLOR_PAIRS. Да предположим, че на изхода на задача в списъка на меню, където традиционните елементи ще бъдат изтеглени по обичайния цвят и шрифт стил, както и текущия елемент - смели и други цветя.

За да направите това, да създадете две така наречените "цветни двойки." Първият ще бъде назначен червеният цвят букви и черно за фон, а вторият - с бели букви и черен фон за:

Сега предполагам, че вектор с низ списък предмети. След това е необходимо да се въвеждат в серия от тези елементи, като ги зададете желаните качества. Демонтирайте примера на малка работна програма (test.cpp):

Някои може да се чудите защо клавиша Enter е хванат с "\ Н", а не KEY_ENTER. Това е много труден въпрос. При извършване на повикване функция nonl (), можете да хванете Въведете този:

Ако не предизвика nonl (), нещо като това:

А KEY_ENTER постоянни актове общо по странен начин ... Като цяло, проверка за съответствие с '\ N' - най-сигурният начин за UNIX-базирани системи.

Входни и мишка събития

За да въведете поредица от стойности, предоставена в функция ncurses scanw (), getstr () и други. Например, за да получите най-символния низ ул масив, можете да го направите:

За да се справят събития на мишката, първо трябва да се инициализира:

След това, на процесора от натискания на клавиши, можете да го направите:

Това са основите на програмирането с помощта на ncurses библиотеката. Има и редица библиотеки за подкрепа за създаване на общи елементи от интерфейса на базата на ncurses: менюта (меню), панели (за панели или припокриващи се прозорци), форми (входни полета). Те са свързани в изходния код съответно:

И свързан в това:

Използвайте ги, ако програмата ви изисква повече от просто четене на натиснатите клавиши и дисплей позиция.