Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Beraldo

Excluir completamente uma janela

Recommended Posts

Estou estudando a biblioteca NCURSES. Encontrei um artigo no VivaOLinux bem interessante.

O link, com o código, é este:

http://www.vivaolinux.com.br/artigo/Utiliz...te-II/?pagina=3

 

O problema é que, após usar delwin(), a janela que deveria ser excluída, fica em segundo plano. Conforme li na manpage da função, esse comportamento é normal. Mas há uma forma de apagar, deveras, a janela, sem que ela fique aparecendo?

 

Encontrei a função werase(), mas não adiantou (não mudou nada).

 

Ah, se alguém tiver alguma indicação de material acerca de NCURSES, faça-a. Será muito bem-vinda. :D

 

[]s

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Respondendo à minha própria pergunta...

 

Consegui fazer isso separando o código em funções e chamando a função que mostra o menu recursivamente:

 

#include <stdio.h>
#include <stdlib.h>
#include <curses.h>

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


int main(void)
{
	iniciar();

	inicia_cores();

	mostra_menu();

	
}


void iniciar()
{
	initscr(); /* Esta função inicializa a ncurses. Para todos os programas devemos sempre inicializar a ncurses e depois finalizar, como veremos adiante. */
}


void inicia_cores()
{
	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);
}



void mostra_menu()
{
	char intKey; //Variável que receberá as teclas passada pelo usuário
	WINDOW *janela1, *janela2; //Variável das janelas que serão criadas
	
	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
		intKey = 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
		mostra_menu();
	}
}



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

 

Essa é a única forma? Realmente não há como apagar, literalmente, uma janela, sem reescrever a janela principal?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.