Projeto 03 - Menu controlado por setas em C
Guilherme Fernandes
em 17 de Outubro de 2018

Neste projeto será apresentado um menu simples com os itens cadastro, relatório e sair, mas será acessado pelas setas direcionais do teclado.

Aprender este truque permitirá fazer até mesmo alguns jogos divertidos em C.

Neste projeto não foi usada a biblioteca gráfica conio 2, conforme apresentado no projeto 01 da urna eletrônica devido ao trabalho para instalá-la. Ela seria necessária para o uso da função gotoxy para posicionar o cursor em um local específica da tela e também para colocar cores de fundo. Mas ao invés disso, foi acrescentada a biblioteca windows.h já padrão do Dev e foi criada uma função chamada moveXY substituindo a gotoxy, usado system("color 4F") para cor de fundo e, por fim, _beep(400,100) para emitir um som ao mover o cursor e ao entrar em cada item do menu.

A função moveXY é apresentada abaixo:

void moveXY(int x, int y, char t[10])
{
    HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = {x,y};
    SetConsoleCursorPosition(hStdout, position);
    printf("%s", t);
}

Nesta função, são passadas as coordenadas x,y do cursor, bem como o texto que será apresentado na posição específica.

A seguir temos a função menu com o Título "menu movel" na posição X=32 e Y=1, seguido dos outros itens como: Cadastro, Relatório e Sair.

void menu()
{
    moveXY(32,1, "::: MENU MOVEL :::");	
    moveXY(33,5,"1- Cadastro");
    moveXY(33,10,"2- Relatorio");
    moveXY(33,15,"1- Sair");
}

Abaixo temos o resultado da execução desta função:
TelaPrincipal

Temos a seguir a função main que já muda a cor de fundo com system ("color 4F"). Posiciona o cursor "->" para X=30 e Y = 5.

Um trecho do código abaixo:

int main() 
{
	system("color 4F");	
	moveXY(30,5, "->");
	do
	{		
		menu();
		moveXY(posX, posY, "->");
		a = toupper(getch());
		
		switch(a)
		{
			case 'H':
				if (posY > 5)
				{
					moveXY(30,posY, "  ");
					posY-=5;
	                                moveXY(30,posY, "->");				
	                                _beep(400,100);
		     	         }
			break;

Entra-se em um loop infinito pelo do...while(1). Chama-se a função menu(). Captura-se a tecla pressionada pelo usuário através do getch(). Neste caso, espera-se o pressionamento das setas direcionais, do qual temos:

1. seta para cima: H
2. seta para baixo: P
3. enter: 13

Entra-se no swicth e será testada a tecla. O cursor poderá estar em apenas 3 posições de Y: 5 = cadastro, 10 = relatório ou 15 = sair.

Caso H, ou seja, o usuário pressionou a seta para cima. Verifica-se Se posY > 5, isso significa que só poderá estar na posição 10(cadastro) ou 15(sair). Então limpa-se a posição do cursor com moveXY(30,posY, " "), decrementa-se em 5 linhas com posY-=5 , pois vai subir o cursor. Em seguida, desenha-se o cursor na nova posição com moveXY(30,posY,"->"). E por fim, emite-se um som com _beep(400,100).

O mesmo raciocínio será usado caso P, ou seja, para baixo.
Depois temos o caso 13, ou seja, caso o usuário pressione ENTER.
Assim, bastará verificar se o posY estará nas posições 5(cadastro),10(relatorio) ou 15(sair) e assim executar o que cada item corresponde.

Tela de cadastro:

Tela1_Cadastro

Código completo pode ser acessado aqui: link 

Caso tenha interesse nas aulas particulares de algoritmos e programação, entre em contato comigo: https://profes.com.br/projetosaza

Governador Valadares / MG

6 avaliações
Curso Livre: Matemática Aplicada (Prandiano )
Olá Pessoal, Sou Guilherme Fernandes, formado há 14 anos em ciência da Computação pela Universidade Vale do Rio Doce (Univale). Sou mestre em Ciências e Técnicas Nucleares pela Universidade Federal de Minas Gerais (UFMG) há 11 anos e atuo há mais de 10 anos em empresas de Análise, Desenvolvimento, Programação, Suporte e Ensino, utilizando ferramentas(Visual Studio, Eclipse e Delphi), linguagens(C#, Java e Pascal) e outras tecnologias de mercado. Atuo como professor há mais de 7 anos ...
Programação em C, Computação - Programação, Estrutura de dados, Lógica de Programação, Computação - Algoritmos, Programação em Java, Portugol
Oferece aulas online (sala profes)
Oferece aulas presenciais
R$ 50 / aula
Conversar
1ª aula gratuita
Cadastre-se ou faça o login para comentar nessa publicação.

Listas de exercícios, Documentos, Revisões de textos, Trabalhos?

Se seu problema for dificuldade em uma lista de exercícios, revisão de teses e dissertações, correção de textos ou outros trabalhos, peça uma ajuda pelo Tarefas Profes.

Enviar Tarefa

Confira artigos similares

Confira mais artigos sobre educação

Ver todos os artigos

Encontre um professor particular

Busque, encontre e converse gratuitamente com professores particulares de todo o Brasil