#include <curses.h> //Incluiremos a biblioteca ao nosso sistema
#include <stdio.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(1). */
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
key = getch();
attroff(COLOR_PAIR(2));
refresh(); //Atualiza a tela
switch (intKey)
{
case 1: 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 2: 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 3: 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);
}
agora é só compilar:
gcc janela.c o janela lncurses
Você pode fazer o download do código-fonte desta página clicando no link abaixo:
[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!!!
[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'.
[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.
[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);
}