Utilizando a biblioteca NCURSES - Parte II

Neste artigo eu explico o que cada função utilizada anteriormente faz e realizo um novo exemplo utilizando a NCURSES para criar várias janelas.

[ Hits: 66.309 ]

Por: Leonardo Barrozo dos Santos em 06/03/2003


Funções que utilizaremos em nosso programa



WINDOW *initscr(void) e int endwin(void)
São as funções que inicializam e fecham a NCURSES. Para todos os programas deveremos sempre inicializar e finalizar com estas funções.

O ponteiro da função initscr é retornado para stdscr, que seria a janela principal do nosso programa.

int start_color(void)
Torna possível o uso das cores, abaixo estão relacionadas todas as cores utilizadas pela biblioteca:
  • COLOR_BLACK
  • COLOR_RED
  • COLOR_GREEN
  • COLOR_YELLOW
  • COLOR_BLUE
  • COLOR_MAGENTA
  • COLOR_CYAN
  • COLOR_WHITE
As cores também podem ser definidas da seguinte forma: COLOR_YELLOW | A_BOLD, na verdade a cor amarela se não utilizada com este atributo ficara parecida com marrom.

int init_pair(short pair, short f, short b)
Define os pares de cores, onde:
  • Pair: número do par.
  • F: cor da frente, do texto.
  • B: cor do fundo.


int bkgd(const chtype ch) ou int wbkgd(WINDOW *win, const chtype ch)
Alteram a cor de fundo da nossa janela, sendo que o bkgd é utilizado somente quando vamos alterar a cor de fundo da nossa janela principal(stdscr) e a wbkgd altera a cor da janela que desejarmos, onde:
  • win: janela onde efetuaremos a mudança das cores.
  • ch: par de cores, será retornado pela função COLOR_PAIR(n), onde n é o número do par definido na função init_pair.
Daqui para frente nós veremos que todos os comandos que não forem utilizados na janela stdscr terão que utilizar a letra w na frente e a janela correspondente terá que ser passada como parâmetro para a função.

int attroff(int attrs) ou int wattroff(WINDOW *win, int attrs)
int attron(int attrs) ou int wattron(WINDOW *win, int attrs)

Manipulam atributos, podemos com essa função colocar um atributo em funcionamento e depois retornarmos ao estado que estava. No nosso primeiro programa vimos como alterar o par de cores e depois retornarmos para o par de cores definido pelo bkgd, poderemos também colocar em uso outros atributos como o atributo A_BOLD, que faz com que as cores fiquem em highlight, onde:
  • win: janela onde efetuaremos as mudanças
  • attrs: atributo
exemplos:

int move(int y, int x) ou int wmove(WINDOW *win, int y, int x) Move o cursor para as coordenadas(x,y) passadas para ela, onde x é a linha e y a coluna.

int printw(char *fmt [, arg] ...) ou int wprintw(WINDOW *win, char *fmt [, arg] ...)
int mvprintw(int y, int x, char *fmt [, arg] ...) ou int mvwprintw(WINDOW *win, int y, int x, char *fmt [, arg] ...)

Funcionam como o printf. Para facilitar nós temos o mvprintw e o mvwprintw que já imprimem o texto nas coordenadas desejadas, tornando desnecessário o uso da função acima mencionada.

int refresh(void) ou int wrefresh(WINDOW *win) Atualiza a tela, sempre que modificarmos as janelas devemos atualizá-las para que as alterações sejam feitas, principalmente quando sobrepomos janelas.

int getch(void) ou int wgetch(WINDOW *win)
int mvgetch(int y, int x) ou int mvwgetch(WINDOW *win, int y, int x)

Ler o próximo caracter digitado pelo usuário.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Funções que utilizaremos em nosso programa
   3. Programa
Outros artigos deste autor

Introdução à linguagem C - Parte II

Introdução à linguagem C - Parte I

Utilizando a biblioteca NCURSES - Parte I

Utilizando a biblioteca NCURSES - Parte III

Leitura recomendada

Substituindo a biblioteca conio.h no Linux usando ncurses curses.h

Criando programas com suporte a arquivos de configuração com a libConfuse

Reprodução de arquivos WAV com SDL_mixer e linguagem C

Aprendendo a utilizar o GNU Debugger (parte 1)

Túnel do Tempo: a função itoa()

  
Comentários
[1] Comentário enviado por hugojuarez em 29/04/2003 - 16:22h

Olá, aki o programa não funcionou direito,
poréim, acho que o problema está que quando se chama a função getch(), ela joga para a
variável o valor ASCII da tecla pressionada, sendo assim, os respectivos valores para as teclas
são:
1 --> 49
2 --> 50
3 --> 51
Após alterar isso no swith, tudo fikou jóinha!!!
falows, Hugo!!!

[2] Comentário enviado por tiago.accon em 21/05/2004 - 08:55h

Bom, funcionou perfeitamente.
Inclusive estou integrando está aplicação ao allegro. Tiago !!

[3] Comentário enviado por polegadas em 13/01/2005 - 19:28h

O hugojuarez esta certo, pelo que tb pude ver, o getch esta recebendo o valor na tabela ASCII referente a '1' '2' e '3', por isso é precisso mudar la no switch, para case 49:, case 50:, case 51. Porem, poderia ser usado um "char intKey" ao invesz de um "int intKey", e usar case '1':, case '2':, case '3'.

[]'s

[4] Comentário enviado por diegotosco em 17/10/2005 - 02:04h

Cara, muito legal essa sua série de artigos, parabéns. Eu estava tentando aprender um pouco sobre ncurses, baixei apostilas, tudo, mas nada tão didático quanto esses seus comentários. Espero que essa sua série continue, está muito legal.

Valeu.

[5] Comentário enviado por diegotosco em 17/10/2005 - 21:27h

Eu queria saber se sempre depois de um atron(COLOR_PAIR(2)), por exemplo, é preciso um atroff(COLOR_PAIR(2)), para mudar de par.

Por exemplo:

//É necessário fazer isso?
atron(COLOR_PAIR(2)); //setando color_pair(2)
atroff(COLOR_PAIR(2)); //desligando color_pair(2)
atron(COLOR_PAIR(3)); //setando color_pair(3)

//Ou pode-se, simplesmente, fazer isso?
atron(COLOR_PAIR(2)); //setando color_pair(2)
atron(COLOR_PAIR(3)); //setando color_pair(3)


Se puder fazer da segunda forma, é preciso um atroff() para cada um dos atributos setados?

[6] Comentário enviado por leonardo barrozo em 06/06/2006 - 15:18h

pesso para q leonardo barrozo entre em contato

[7] Comentário enviado por willians dutra em 02/11/2007 - 09:46h

muito legal a parte II. parabéns.

[8] Comentário enviado por h4shbang em 26/02/2008 - 04:43h

char key[1]; tmb ...

[9] Comentário enviado por Von_Doom em 31/10/2010 - 21:00h

Quando aperto 3 para sair não acontece nada...

[10] Comentário enviado por removido em 08/12/2013 - 17:27h

CÓDIGO CORRIGIDO:

#include <curses.h> //Incluiremos a biblioteca ao nosso sistema
#include <stdio.h>
#include <stdlib.h>

void sair (void); //Esta função fará com que o programa seja fechado

int main(void)
{
int intKey; //Variável que receberá as teclas passada pelo usuário
WINDOW *janela1, *janela2; //Variável das janelas que serão criadas
initscr(); /* Esta função inicializa a ncurses. Para todos os programas devemos sempre inicializar a ncurses e depois finalizar, como veremos adiante. */

start_color(); //Esta função torna possível o uso das cores

//Abaixo estamos definindo os pares de cores que serão utilizados no programa
init_pair(1,COLOR_WHITE,COLOR_BLUE);
init_pair(2,COLOR_BLUE,COLOR_WHITE);
init_pair(3,COLOR_RED,COLOR_WHITE);
init_pair(4,COLOR_GREEN,COLOR_BLACK);

bkgd(COLOR_PAIR(1)); /*Aqui nós definiremos que a cor de fundo do nosso programa será azul e a cor dos textos será branca.*/

for(;;)
{
attron(COLOR_PAIR(3)); /* Estamos alterando o par de cores para 3 em vez de utilizar o par de cor por omissão
mvprintw(2,1,"Menu Principal"); // Imprimimos um texto na tela na linha 2, coluna 1
attroff(COLOR_PAIR(3)); /* Estamos alterando o par com a cor por omissão, ou seja, retornando para o par de cor 1. */
attron(COLOR_PAIR(2));
mvprintw(4,5,"1. Janela 1"); //Imprime um texto na tela na linha 4, coluna 5
mvprintw(5,5,"2. Janela 2"); //Imprime um texto na tela na linha 5, coluna 5
mvprintw(6,5,"3. Sair"); //Imprime um texto na tela na linha 6, coluna 5
mvprintw(8,5,"3. Digite sua opção: "); //Imprime um texto na tela na linha 8, coluna 5
intKey = getch();
attroff(COLOR_PAIR(2));
refresh(); //Atualiza a tela

switch (intKey)
{
case 49: janela1 = newwin(5, 40, 5, 10); /*Cria uma no janela 5 linhas, 40 colunas posiciona na 5 coluna, linha 10 e que aparecera na coluna 5, linha 10 */
wbkgd(janela1,COLOR_PAIR(4)); //Definiremos a cor de fundo da janela1
//Abaixo imprimiremos um texto dentro da janela1
wattron(janela1, A_BOLD); //Coloca a cor do texto em formato A_BOLD
mvwprintw(janela1,2,1,"JANELA1 Verde com A_BOLD. Aperte qualquer tecla para sair.");
wattroff(janela1, A_BOLD);
wrefresh(janela1); //Atualizaremos a janela1
wgetch(janela1); //Esperaremos que alguma tecla seja apertada
delwin(janela1); //Deletaremos a janela
break;
case 50: janela2 = newwin(5, 40, 5, 10); /*Cria uma no janela 5 linhas, 40 colunas posiciona na 5 coluna, linha 10 e que aparecera na coluna 5, linha 10 */
wbkgd(janela2,COLOR_PAIR(4)); //Definiremos a cor de fundo da janela2
box(janela2, ACS_VLINE, ACS_HLINE); //Aqui coloca uma borda na janela2
//Abaixo imprimiremos um texto dentro da janela2
mvwprintw(janela2,2,2,"JANELA2 Verde sem A_BOLD. Aperte qualquer tecla para sair.");
wrefresh(janela2); //Atualizaremos a janela2
wgetch(janela2); //Esperaremos que alguma tecla seja apertada
delwin(janela2); //Deletaremos a janela
break;
case 51: sair(); // Sai do programa
break;
}
refresh(); //Atualiza a tela
}
}

void sair()
{
endwin(); /* Sempre que finalizarmos um programa com a biblioteca curses, devemos executar este comando. */
exit(0);
}

[11] Comentário enviado por removido em 10/12/2013 - 00:35h

.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts

attron(A_BOLD); wattron(principal, A_BOLD);
attroff(A_BOLD); wattroff(principal, A_BOLD);
attron(COLOR_PAIR(2)); wattron(principal, COLOR_PAIR(2));
attroff(COLOR_PAIR(2)); wattroff(principal, COLOR_PAIR(2));