Programarea cu ncurses primii pași

Uneori trebuie să scrie orice program, fără a recurge la bibliotecile neindemanare grafice, cum ar fi toolkit Qt sau GTK, și dispune de ieșire obișnuită consola (printf, cout) nu este încă suficient. Ce să fac? Ajutorul vine ncurses.

Ncurses conectați la programul în C sau C ++ este foarte simplu. Suficient pentru a utiliza în directiva #include sursă , și pentru a compila -lncurses pentru a lega specifica:

Desigur, este necesar să aibă instalat ncurses antet fișiere. În pachetul Debian și Ubuntu cu ei numit ncurses-dev:

Pentru a construi programul, în cazul în care mai mult de un fișier, este convenabil de a folosi un fel de autotools sistem sau Scons construi. În cazul din urmă (I prefer), în directorul sursă al programului trebuie să creați un fișier numit SConstruct următorul conținut:

Acum, când executați catalog aceeași comandă scons vor fi compilate toate .cpp-fișiere și legate cu biblioteca ncurses, precum și orice alte (în exemplul - «alte»-libs). Pentru a construi și a instala programul este necesar să se efectueze ca root:

Ieșiți din biblioteca ncurses ar trebui să conteste funcția endwin (), care eliberează toate resursele alocate bibliotecii și a reveni terminal la starea înainte de inițializarea bibliotecii software-ului.

Pentru a citi intrarile de la tastatura este utilizată în scopuri generale getch () funcție, și pentru citirea unei anumite ferestre - wgetch (). Ciclul arata ceva de genul:

În acest exemplu, vom lua în considerare toate cele trei tipuri de chei de determinare este apăsată: direct pe simbolul, și prin constante cu nume de cod. Dacă noecho funcția () este dezactivat, tastatura vor fi afișate pe ecran, în caz contrar - nu va.

Pentru ieșire text la consola este cel mai des utilizat printw funcția (), care are aceleași argumente ca și printf (), astfel încât să puteți formata textul după cum doriți. Pentru C ++ rânduri (std: string) ca șirul de parametri necesari pentru a le trece prin c_str () funcție, adică:

În derivarea șir fără Trailing «\ n» caracterul cursorul rămâne în linia curentă, ultimul caracterele afișate, astfel încât următorul apel printw (), în acest caz, va completa linia curentă. Funcția addch () este folosit pentru a afișa un simbol transmis în parametrul. Imediat l-am putea cere un semn de atribute (simbol este combinat cu atributele folosind o logică SAU):

Tiparul simbolului pe coordonatele date, puteți:

atribute text - culoarea și stilul. Ele sunt relevante pentru printw (). Cum pot schimba atributele?

Mai întâi, trebuie să activați „motor de culoare» ncurses, cauzand (de obicei, după initscr ()) Funcția:

În interior se creează o paletă de 8 culori de bază (COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE), precum și inițializată globale variabile, culorile și COLOR_PAIRS. Să presupunem că ieșirea sarcina unei liste de meniu, în cazul în care elementele convenționale vor fi trase în culoare și font stilul obișnuit, iar elementul curent - un bold și alte flori.

Pentru a face acest lucru, de a crea două așa-numitele „perechi de culori.“ Primul va fi atribuit litere de culoare roșu și negru pentru fundal, iar al doilea - alb litere și negru pentru fundal:

Acum, să presupunem că un vector cu elemente de listă șir. Apoi, aveți nevoie pentru a aduce într-o serie de aceste elemente, definindu-le atributele dorite. Dezasambla exemplul unui program de lucru mic (test.cpp):

Unii se pot întreba de ce tasta Enter este prins de „\ n“, mai degrabă decât KEY_ENTER. Aceasta este o întrebare foarte dificilă. În timp ce face un apel funcția nonl (), puteți prinde Introduceți acest lucru:

În cazul în care nu provoacă nonl (), ceva de genul:

Un KEY_ENTER acționează constant cu totul într-un mod ciudat ... În general, verificarea conformității cu „\ n“ - modalitatea cea mai sigură pentru sistemele bazate pe UNIX.

evenimente de intrare și mouse

Pentru a introduce un șir de valori furnizate în funcția ncurses scanw (), getstr () și altele. De exemplu, pentru a obține șirul într-o matrice str, puteți face acest lucru:

Pentru a gestiona evenimentele mouse-ul trebuie să inițializa mai întâi:

După aceea, procesorul de prese-cheie, puteți face acest lucru:

Acestea sunt elementele de bază ale programării folosind biblioteca ncurses. Există, de asemenea, o serie de biblioteci de sprijin pentru a crea un element de interfață comune bazate pe meniuri pentru ncurses: (meniu), panouri (pentru panouri sau ferestre suprapuse), formulare (câmpuri de intrare). Acestea sunt conectate în mod corespunzător codul sursă:

Și legat în această:

Utilizați-le în cazul în care programul necesită mai mult decât o simplă citire de taste și afișare poziție.