PB071: Úvod do jazyka C - 9

Ovládání obrazovky a klávesnice

Unix - knihovna curses

Charakteristika

Umožňuje akce jako:

Knihovna existuje ve starší verzi curses a v novější ncurses. Celkový počet funkcí přesahuje 300

Příklad

/* Prelozit: */
/* module add ncurses */
/* gcc testcurses.c -o testcurses -lncurses */
/* Pred spustenim nastavit: export TERM=xterm  */
#include <ncurses.h>
#include <unistd.h>

int main()
{ int i,ch;
  char text[]="Stiskni nejakou klavesu ";
  char usr[10],pwd[10];
  WINDOW *ww;
/* inicializace */
  initscr(); /* Zacatek prace s curses */
  cbreak(); noecho(); keypad(stdscr,1); /* Nastav implicitní režimy */
  nodelay(stdscr,0); nl();
  clear(); /* Vymaz obrazovku */
/* pis po obrazovce - uhlopricne */
  mvaddstr(0,20,"Zkouska psani po obrazovce:"); /* pis text na zadanou pozici */
  getmaxyx(stdscr,maxr,maxc);
  move(maxr-1,0); /* Presun kurzor */
  printw("Okno ma %d radku, %d sloupcu",maxr,maxc); /* od pozice kurzoru pis text */
  for(i=0;i<23;i++)
  { mvaddch(i+1,3*i,text[i]); /* od pozice kurzoru pis znak */ 
    napms(300); /* Cekej zadany pocet milisekund */
    refresh(); /* Teprve ted se zmeny vykresli! */
  }
/* zkouska cteni z klavesnice */
  ch=getch(); /* Cti znak z klavesnice */
  attrset(A_STANDOUT); /* Dale pis zvyraznene */
  mvprintw(2,30,"%s %c","Stiskl jsi: ",ch); /* Jako printf, ale do okna curses na danou pozici */
  refresh();
  sleep(5u); /* Cekej 5 sekund */
  clear();
  refresh();
/* zkouska okna */
  ww=newwin(5,20,10,30); */ Vytvor podokno */
  wborder(ww,'|','I','-','=','.',',','+','*'); /* Oramuj okno */
  echo(); /* Vstup vypisuj */
  mvwaddstr(ww,1,2,"Login: "); /* Pis do podokna */
  wgetstr(ww,usr); /* Cti retez v okne */
  noecho(); /* Vstup nevypisuj */
  wmove(ww,3,2);waddstr(ww,"Password: ");
  wgetstr(ww,pwd);
  wrefresh(ww); /* Prekresli jen podokno */
  delwin(ww); /* Zrus podokno */
  attrset(A_REVERSE); /* Nadale prohod barvu popredi a pozadi (negativ) */
  mvprintw(20,10,"Vsichni sem! "
    "Uzivatel \"%s\" ma heslo \"%s\"",usr,pwd);
  refresh();
  sleep(5u);
  clear();
/* zkouska barvy */
  if(has_colors()) /* Umi terminal zpracovavat barvy? */
  { start_color(); /* Pracuj s barvami */
    init_pair(1, COLOR_RED, COLOR_YELLOW); /* Definuj dvojici barev (pozadi, popredi) */
    attron(COLOR_PAIR(1)); /* Pouzij definovanou dvojici barev */
    mvprintw(4,30,"BAREVNY TEXT");
    attroff(COLOR_PAIR(1)); /* Prestan pouzivat dvojici barev */
    refresh();
    i=getch(); /* Cekej na zadani znaku */
  }
  endwin(); /* Konec prace s ncurses */
  return 0;
}

Bližší popis

man curses
Obecný popis
man curs_inopts
Chování terminálu při vstupu z klávesnice
man curs_outopts	
Chování terminálu při výstupu na obrazovku
man curs_addch
man curs_addstr
man curs_addchstr
man curs_addwch
man curs_addwstr
man curs_addwchstr
Zápis znaků a řetězců na obrazovku
man curs_getch
man curs_getyx
man curs_getstr
man curs_getwch
man curs_getwstr
Čtení znaku nebo řetězce z klávesnice
man curs_inch
man curs_instr
man curs_inwstr
man curs_inwchstr
Sejmutí obsahu části obrazovky
man curs_insch
man curs_insstr
man curs_inswstr
Vložení znaku nebo řetězce
man curs_move
Přesun kursoru (lze též spojit s výstupní operací)
man curs_printw
man curs_scanw
Analogie printf a scanf prováděná v okně
man curs_attr	
Nastavení atributů textu
man curs_border
Vykreslování rámečků a čar
man curs_bkgd
Nastavení pozadí okna
man curs_color
Manipulace s barvami (vyžaduje terminál schopný práce s barvami,
např. xterm)
man curs_initscr
man curs_window
Vytváření a rušení oken, manipulace s nimi
man curs_overlay
Ovládání překrývání oken
man curs_clear
Výmaz okna nebo jeho části
man curs_delch
man curs_delln
Výmaz znaků a řádků
man curs_touch
Indikace, že se změnilo okno nebo jeho část
man curs_pad
Práce se strukturami pad (analogie okna, ale nemusí být zobrazeno)
man curs_scr_dump
Záznam a obnova obsahu virtuálního okna
man curs_slk
Práce s funkčními klávesami
man curs_beep
Akustická a optická signalizace
man curs_refresh
Znovuvykreslení okna nebo jeho části
man curs_util
Různé pomocné funkce
man curs_termattrs
man curs_terminfo
man curs_termcap
Ovládání vlastností terminálu
man curs_kernel
Low-level funkce

Pro použití knihovny ncurses je třeba před překladem aktivovat modul ncurses, v parametrech pro překladač vynechat parametr -pedantic a přidat na konec parametr -lncurses. Před spuštěním přeloženého programu je na počítači AISA třeba provést  příkaz export TERM=xterm (s terminálem linux-aisa nebudou ncurses fungovat).

MS-DOS - knihovna conio

Charakteristika

Umožňuje podobné akce jako curses, ale je mnohem chudší. Je podporována běžnými překladači pro platformu DOS/Windows včetně MINGW gcc/g++

Některé funkce

gotoxy Přesun kursoru na zadanou pozici
wherex, wherey Zjištění vodorovné (svislé) pozice kursoru
putch Vypiš znak na danou pozici
puttext Vypiš řetězec na danou pozici
textattr Zadej atributy textu (barva textu, barva pozadí, blikání)
textcolor, textbackground Zadej barvu textu a pozadí
lowvideo, normvideo, hivideo Ovládání jasu zobrazeného textu
clreol, clrscr Vymaž zbytek řádku, vymaž obrazovku
getch, getche Přečti znak (bez opsání, s opsáním)
getpass Vypiš výzvu a přečti řetězec bez opsání
cgets, cputs Analogie gets, puts, ale v okně
cscanf, cprintf Analogie scanf, printf, ale v okně
kbhit Test, zda v bufferu klávesnice čeká znak na zpracování
window Vytvoření okna

Na rozdíl od ncurses není nutno systém conio inicializovat ani uzavírat.

Knihovna conio byla portována rovněž pod Unix, zde je však mnohem lepší používat curses.

Popis

Viz online nápovědu k překladačům firmy Borland (Borland C++, Borland C++ Builder) nebo http://conio.sourceforge.net/ (pro verzi MINGW)

MS-Windows

Vzhledem k tomu, že jde o grafické prostředí, je nutno používat grafické knihovny. Některé jsou probírány v přednášce z předmětu PB161 - Programování v C++


Předchozí Předchozí přednáška Další přednáška Hlavní stránka Hlavní stránka